Rediriger toutes les sorties vers le fichier

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

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

Cette partie est écrite dans stderr, utilisez 2> pour la redirect. 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 syntaxe pour vérifier la syntaxe appropriée

Tous les systèmes d’exploitation POSIX ont 3 stream : stdin, stdout et stderr. stdin est l’entrée qui peut accepter la sortie standard 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 de sorte que toute exception ne soit pas transmise à une commande ou écrite dans un fichier susceptible de se rompre; normalement, cela est envoyé à un journal de quelque sorte, ou vidé directement, même lorsque la sortie standard est redirigée. Pour redirect les deux au même endroit, utilisez:

command &> /some/file

EDIT : merci à Zack d’avoir souligné 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 

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

 make 2>&1 | tee file.txt 

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

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 append.

Si vous ne spécifiez pas de numéro, le stream de sortie standard est supposé, mais vous pouvez également redirect 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 null qui prend n’importe quelle entrée et la jette. Il peut être utilisé pour supprimer toute sortie.

Crédits à osexp2003 et ja …


Au lieu de mettre

 &>> your_file.log 

derrière une ligne dans

 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.

Ce pourrait être l’erreur standard. Vous pouvez le redirect:

 ... > out.txt 2>&1 

Commander:

 foo >> output.txt 2>&1 

ajoute au fichier output.txt sans remplacer le contenu.

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

exemple de script:

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

Utilisez >> pour append:

command >> file

Dans Linux Mint, cette chaîne de commande routait l’exécution du script et des erreurs vers un seul fichier txt. bash -x ./setup.sh > setup.txt 2>&1 . Le nom du script était setup.sh et la destination de la sortie était setup.txt.