Lorsque vous souhaitez rediriger à la fois stdout et stderr vers le même fichier, vous pouvez le faire en utilisant command 1>file.txt 2>&1
, ou command &>file.txt
. Mais pourquoi le comportement est-il command 1>file.txt 2>file.txt
différent des deux commandes ci-dessus?
Ce qui suit est une commande de vérification.
$ cat redirect.sh
#!/bin/bash
{ echo -e "output\noutput" && echo -e "error" 1>&2; } 1>file.txt 2>&1
{ echo -e "output\noutput" && echo -e "error" 1>&2; } 1>file1.txt 2>file1.txt
{ echo -e "error" 1>&2 && echo -e "output\noutput"; } 1>file2.txt 2>file2.txt
{ echo -e "output" && echo -e "error\nerror" 1>&2; } 1>file3.txt 2>file3.txt
{ echo -e "error\nerror" 1>&2 && echo -e "output"; } 1>file4.txt 2>file4.txt
$ ./redirect.sh
$ echo "---file.txt---"; cat file.txt;\
echo "---file1.txt---"; cat file1.txt; \
echo "---file2.txt---"; cat file2.txt; \
echo "---file3.txt---"; cat file3.txt; \
echo "---file4.txt----"; cat file4.txt;
---file.txt---
output
output
error
---file1.txt---
error
output
---file2.txt---
output
output
---file3.txt---
error
error
---file4.txt----
output
rror
En ce qui concerne les résultats, il semble que la deuxième chaîne d'écho écrase la première chaîne d'écho lorsque vous exécutez command 1>file.txt 2>file.txt
, mais je ne sais pas pourquoi. (Y a-t-il une référence quelque part?)
la source
L'utilisation
>
indique de remplacer le fichier. Puisque stdout et stderr écrivent dans le fichier en deux opérations différentes, la dernière à écrire écrasera la première.Tu peux faire:
command 1>>file.txt 2>>file.txt
ou
command &>file.txt
Bash v4 et supérieur uniquement.>>
lui dit d'ajouter le fichier afin qu'il ne remplace pas la sortie des opérations précédentes.&>
est juste un moyen plus simple d'écrire2>&1
la source
ls 1>&0
etls 0>&0
affiche- t- il toujours la sortie de ls?>>
œuvres. Pourquoi cela n'a-t-il pas le problème de deux descriptions de fichiers avec des décalages indépendants? @JdeBP, savez-vous? Je pensais que l'ouverture d'un fichier en mode ajout équivalait à l'ouverture en mode écriture, la recherche de la position finale, puis l'interdiction de poursuivre la recherche.O_APPEND
.