Como eu combino stdout e stderr para diferentes shells?

18

Eu sei a resposta para algumas conchas, por exemplo, com cmd.exevocê pode:

some.exe > out.txt 2>&1

Como você consegue o mesmo para outros shells (bash, ksh, tcsh, powershell, etc)?

pesche
fonte

Respostas:

16

Casca de peixe

Para redirecionar a saída padrão e o erro padrão para o arquivo all_output.txt, você pode escrever:

echo Hello > all_output.txt ^&1
Gringo Suave
fonte
3
se canalizar a saída para o próximo comando, use 2> | em vez disso: eco Olá 2> | menos
Jeffrey04
A sintaxe da tubulação pode ter sido alterada. Meu shell de peixe usa a mesma sintaxe "^ & 1" para ambos.
precisa saber é o seguinte
2>&1também funciona - ^é essencialmente uma abreviação de peixe >2. Note-se que 2>| lessou ^| lesspor si só tubos única stderr; a tubulação tanto o nosso e err, fazer^&1 | less
Beni Cherniavsky-Paskin
Shorthands de sintaxe para redirecionando / tubulação tanto fora e err ainda estão em discussão github.com/fish-shell/fish-shell/issues/110
Beni Cherniavsky-Paskin
5

Para csh e tcsh

some.exec >& out.txt
KeithB
fonte
para tcsh, você também temsome.exec |& less
boatcoder
2

No Powershell , é exatamente o mesmo:

2> & 1 Envia erros para o processo de obtenção nenhum, PowerShell 2> & 1
          fluxo de saída de sucesso.

(de about_Redirection).

No bashksh e pelo menos eu também sei que funciona dessa maneira.

Parece ser uma convenção comum.

Uma maneira rápida de descobrir isso é abrir a página de manual do shell e pesquisar &1(com /e digitando &1). Isso raramente ocorre em outros contextos.

Joey
fonte
2

No bash, você faz exatamente o mesmo.

./some_exec > out 2>&1
Bjarke Freund-Hansen
fonte