Comment puis-je rediriger et ajouter stdout et stderr à un fichier avec Bash?
rediriger stdout pour un fichier tronqué en Bash, je sais pour les utiliser:
cmd > file.txt
rediriger stdout en Bash, en ajoutant à un fichier, je sais pour les utiliser:
cmd >> file.txt
pour rediriger les deux stdout et stderr vers un fichier tronqué, je sais utiliser:
cmd &> file.txt
Comment puis-je rediriger les deux stdout et stderr en annexe à un fichier? cmd &>> file.txt
n'a pas fonctionné pour moi.
6 réponses
cmd >>file.txt 2>&1
Bash exécute les redirections de gauche à droite comme suit:
-
>>file.txt
: ouvrezfile.txt
en mode ajout et redirigezstdout
là. -
2>&1
: "Redirection de 151950920" à , "oùstdout
est actuellement en cours" . Dans ce cas, c'est un fichier ouvert en mode ajout. En d'autres termes, le&1
réutilise le descripteur de fichier quistdout
actuellement utiliser.
il y a deux façons de faire cela, en fonction de votre version Bash.
Le classique et portable ( Bash pré-4 ):
cmd >> outfile 2>&1
Un non-compatibles manière, en commençant par Bash 4 est
cmd &>> outfile
(analogue à &> outfile
)
pour un bon style de codage, vous devriez
- décider si la portabilité est un sujet de préoccupation (alors utilisation classique)
- décider si la portabilité même pour Bash pre-4 est une préoccupation (puis utiliser la manière classique)
- peu importe la syntaxe que vous utilisez, ne pas la modifier dans le même script (confusion!)
si votre script commence déjà par #!/bin/sh
(peu importe si c'est prévu ou non), alors la solution Bash 4, et en général n'importe quel code spécifique à Bash, n'est pas la bonne solution.
rappelez-vous aussi que Bash 4 &>>
est juste une syntaxe plus courte - il n'introduit aucune nouvelle fonctionnalité ou quoi que ce soit de ce genre.
la syntaxe est (à côté d'une autre syntaxe de redirection) décrite ici: http://bash-hackers.org/wiki/doku.php/syntax/redirection#appending_redirected_output_and_error_output
dans Bash vous pouvez également spécifier explicitement vos redirections vers des fichiers différents:
cmd >log.out 2>log_error.out
Ajoutant:
cmd >>log.out 2>>log_error.out
En Bash 4 (ainsi que ZSH 4.3.11):
cmd &>>outfile
vient de sortir de la boîte
Cela devrait fonctionner:
your_command 2>&1 | tee -a file.txt
il stockera tous les journaux dans le fichier .txt ainsi que les décharger sur le terminal.
Essayez cette
You_command 1>output.log 2>&1
votre usage de & > X. file fonctionne dans bash4. désolé pour cela: (
Voici quelques conseils supplémentaires.
0, 1, 2...9 sont des descripteurs de fichier dans bash.
0 signifie stdin
, 1 signifie stdout
, 2 signifie stderror
. 3~9 est libre pour toute autre usage temporaire.
N'importe quel descripteur de fichier peut être redirigé vers un autre fichier descripteur ou fichier en utilisant l'opérateur >
ou >>
(annexe).
Usage: < file_descriptor > > < nom de fichier | &file_descriptor >
s'il vous plaît référence à http://www.tldp.org/LDP/abs/html/io-redirection.html