web-dev-qa-db-fra.com

Rediriger toutes les sorties vers un fichier

Je sais que sous Linux, pour rediriger la sortie de l'écran vers un fichier, je peux utiliser le > ou tee. Cependant, je ne sais pas pourquoi une partie de la sortie est toujours affichée à l'écran et non écrite dans le fichier.

Existe-t-il un moyen de rediriger toutes les sorties vers un fichier?

698
Rayne

Cette partie est écrite dans stderr, utilisez 2> pour la rediriger. Par exemple:

foo > stdout.txt 2> stderr.txt

ou si vous voulez dans le même fichier:

foo > allout.txt 2>&1

Note: cela fonctionne dans (ba) sh, vérifiez votre shell pour la syntaxe appropriée

1111
Op De Cirkel

Tous les systèmes d'exploitation POSIX ont 3 flux : stdin, stdout et stderr. stdin est l'entrée qui peut accepter stdout ou stderr. stdout est la sortie principale qui est redirigée avec >, >> ou |. stderr est la sortie d'erreur, qui est gérée séparément afin que les exceptions ne soient pas transmises à une commande ou écrites dans un fichier qui pourrait être rompu. normalement, cela est envoyé à un journal quelconque ou directement, même lorsque le stdout est redirigé. Pour rediriger les deux au même endroit, utilisez:

command &> /some/file

EDIT: merci à Zack d'avoir signalé que la solution ci-dessus n'est pas portable - utilisez plutôt:

*command* > file 2>&1 

Si vous voulez faire taire l'erreur, faites:

*command* 2> /dev/null
140
Bryan Agee

Pour obtenir la sortie sur la console ET dans un fichier file.txt par exemple.

make 2>&1 | tee file.txt

Remarque: & (dans 2>&1) spécifie que 1 n'est pas un nom de fichier, mais un descripteur de fichier.

80
Sagar Jain

Utilisez ceci - "require command here" > log_file_name 2>&1

Description détaillée de l'opérateur de redirection sous Unix/Linux.

L'opérateur> redirige généralement la sortie vers un fichier, mais il peut s'agir d'un périphérique. Vous pouvez également utiliser >> pour ajouter.

Si vous ne spécifiez pas de nombre, le flux de sortie standard est utilisé, mais vous pouvez également rediriger les erreurs.

> file redirects stdout to file
1> file redirects stdout to file
2> file redirects stderr to file
&> file redirects stdout and stderr to file

/ dev/null est le périphérique nul qui prend toutes les entrées que vous voulez et les jette. Il peut être utilisé pour supprimer toute sortie.

43
Indrajeet Gour

Crédits à osexp2003 et j.a. …


Au lieu de mettre

&>> your_file.log

derrière une ligne

crontab -e

J'utilise

#!/bin/bash
exec &>> your_file.log
…

au début d'un script BASH.

Avantage: vous avez les définitions de journal dans votre script. Bon pour Git etc.

29
qräbnö

Vous pouvez utiliser la commande exec pour rediriger ultérieurement toutes les sorties stdout/stderr de toutes les commandes.

exemple de script:

exec 2> your_file2 > your_file1
your other commands.....
15
osexp2003

C'est peut-être l'erreur type. Vous pouvez le rediriger:

... > out.txt 2>&1
15
Petar Ivanov

Commander:

foo >> output.txt 2>&1

ajoute au fichier output.txt , sans remplacer le contenu.

14
ellockie

Utilisez >> pour ajouter:

command >> file

6
khushi muhammad