Question Rediriger toutes les sorties vers le fichier [dupliquer]


Cette question a déjà une réponse ici:

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

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


628
2017-07-13 05:06


origine


Réponses:


Cette partie est écrite sur stderr, utilisez 2> pour le 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 correcte


1007
2017-07-13 05:10



Tous les systèmes d'exploitation POSIX avoir 3 cours d'eau: stdin, stdout et stderr. stdin est l'entrée, qui peut accepter le stdout ou le 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 qu'aucune exception ne soit transmise à une commande ou écrite dans un fichier qu'elle pourrait casser; normalement, ceci est envoyé à un journal de quelque sorte, ou déposé directement, même lorsque le stdout est redirigé. Pour rediriger les deux au même endroit, utilisez:

commander &> /some/file

MODIFIER: merci à Zack pour 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

132
2017-07-13 05:16



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) précise que 1 n'est pas un nom de fichier mais un descripteur de fichier.


68
2018-04-09 04:48



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 peut l'être vers un périphérique. Vous pouvez également utiliser >> pour ajouter.

Si vous ne spécifiez pas de nombre, le flux de sortie standard est supposé 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 null il prend n'importe quelle entrée que vous voulez et le jette loin. Il peut être utilisé pour supprimer toute sortie.


37
2018-06-11 15:57



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 log dans votre script. Bon pour Git etc.


23
2018-03-19 14:26



Ce pourrait être l'erreur standard. Vous pouvez le rediriger:

... > out.txt 2>&1

15
2017-07-13 05:10



Commander:

foo >> output.txt 2>&1

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


14
2017-11-24 17:08



Vous pouvez utiliser exec commande pour rediriger toute sortie stdout / stderr de toutes les commandes plus tard.

exemple de script:

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

12
2018-04-26 14:32



Utilisation >> à ajouter:

command >> file


7
2018-04-16 09:38



Dans Linux Mint, cette chaîne de commande est routée en exécutant le script et les erreurs dans un seul fichier txt. bash -x ./setup.sh > setup.txt 2>&1. Le nom de script était setup.sh et la destination de sortie était setup.txt.


-3
2017-08-02 10:55