Quando você deseja redirecionar stdout e stderr para o mesmo arquivo, pode fazê-lo usando command 1>file.txt 2>&1
, ou command &>file.txt
. Mas por que o comportamento é command 1>file.txt 2>file.txt
diferente dos dois comandos acima?
A seguir, é um comando de verificação.
$ 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
Tanto quanto os resultados são vistos, parece que a segunda string de eco substitui a primeira quando você executa command 1>file.txt 2>file.txt
, mas não sei por que. (Existe uma referência em algum lugar?)
bash
shell
io-redirection
echo
fhiyo
fonte
fonte
Usar
>
indica para substituir o arquivo. Como você tem stdout e stderr gravando no arquivo em duas operações diferentes, a última a gravar substituirá a primeira.Você pode fazer:
command 1>>file.txt 2>>file.txt
ou
command &>file.txt
Apenas bash v4 e acima.>>
diz para anexar o arquivo para que não substitua a saída das operações anteriores.&>
é apenas uma maneira mais fácil de escrever2>&1
fonte
ls 1>&0
els 0>&0
ainda mostra a saída de ls?>>
obras. Por que isso não tem o problema de duas descrições de arquivo com compensações independentes? @JdeBP, você sabe? Eu pensei que abrir um arquivo no modo de acréscimo era equivalente a abrir no modo de gravação, procurar a posição final e, em seguida, impedir a busca adicional.O_APPEND
.