Pour rediriger stdout vers un fichier tronqué dans Bash, je sais utiliser:
cmd > file.txt
Pour rediriger stdout dans Bash, en ajoutant un fichier, je sais utiliser:
cmd >> file.txt
Pour rediriger les deux stdout et stderr vers un fichier tronqué, je sais utiliser:
cmd &> file.txt
Comment rediriger les deux stdout et stderr dans un fichier? cmd &>> file.txt
n'a pas fonctionné pour moi.
cmd >>file.txt 2>&1
Bash exécute les redirections de gauche à droite comme suit:
>>file.txt
: Ouvrez file.txt
en mode ajout et redirigez stdout
.2>&1
: Rediriger stderr
vers "où stdout
va actuellement" . Dans ce cas, il s’agit d’un fichier ouvert en mode ajout. En d'autres termes, le &1
réutilise le descripteur de fichier que stdout
utilise actuellement.Il existe deux façons de procéder, en fonction de votre version de Bash.
La méthode classique et portable (Bash pre-4) est la suivante:
cmd >> outfile 2>&1
Une manière non portable, commençant par Bash 4 est
cmd &>> outfile
(analogique à &> outfile
)
Pour un bon style de codage, vous devriez
Si votre script commence déjà par #!/bin/sh
(peu importe si prévu ou non), la solution Bash 4, et en général tout code spécifique à Bash, n'est pas la solution.
Rappelez-vous également que Bash 4 &>>
n’est qu’une syntaxe plus courte. Il n’introduit aucune nouvelle fonctionnalité, ni rien 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 différents fichiers:
cmd >log.out 2>log_error.out
Ajouter serait:
cmd >>log.out 2>>log_error.out
Dans Bash 4 (ainsi que ZSH 4.3.11):
cmd &>>outfile
juste hors de la boîte
Cela devrait bien fonctionner:
your_command 2>&1 | tee -a file.txt
Il stockera tous les journaux dans file.txt et les sauvegardera sur le terminal.
Essaye ça
You_command 1>output.log 2>&1
Votre utilisation de &> x.file fonctionne dans bash4. Désolé : (
0, 1, 2 ... 9 sont des descripteurs de fichier dans bash.
0 représente stdin
, 1 correspond à stdout
, 2 correspond à stderror
. 3 ~ 9 est disponible pour toute autre utilisation temporaire.
Tout descripteur de fichier peut être redirigé vers un autre descripteur de fichier ou un fichier à l'aide de l'opérateur >
ou >>
(ajouter).
Utilisation: <Descripteur_fichier> > <nom_fichier | & descripteur_fichier>
Veuillez faire référence à http://www.tldp.org/LDP/abs/html/io-redirection.html
Je suis surpris que dans près de dix ans, personne n’ait encore publié cette approche:
Si vous utilisez des versions plus anciennes de bash où &>>
n'est pas disponible, vous pouvez également effectuer les opérations suivantes:
(cmd 2>&1) >> file.txt
Cela crée un sous-shell, il est donc moins efficace que l'approche traditionnelle de cmd >> file.txt 2>&1
, mais cette approche me semble plus naturelle et compréhensible:
En outre, les parenthèses suppriment toute ambiguïté d'ordre, surtout si vous souhaitez diriger stdout et stderr vers une autre commande.