Jak połączyć stdout i stderr dla różnych powłok?

18

Znam odpowiedź na niektóre muszle, np. Z cmd.exetobą możesz:

some.exe > out.txt 2>&1

Jak to osiągnąć dla innych powłok (bash, ksh, tcsh, powershell itp.)?

pesche
źródło

Odpowiedzi:

16

Skorupa ryb

Aby przekierować zarówno standardowe wyjście, jak i standardowy błąd do pliku all_output.txt, możesz napisać:

echo Hello > all_output.txt ^&1
Gringo Suave
źródło
3
jeśli przekazujesz dane wyjściowe do następnego polecenia, użyj 2> | zamiast tego: echo Hello 2> | mniej
Jeffrey04,
Składnia potoków mogła ulec zmianie. Moja skorupa ryby używa tej samej składni „^ i 1” dla obu.
Keith Bentrup
2>&1działa również - ^jest w skrócie skrótem od ryby >2. Zauważ, że 2>| lesslub ^| lesssame rury tylko stderr; aby potokować zarówno nasze, jak i błądzić, zrób^&1 | less
Beni Cherniavsky-Paskin
Skróty
Beni Cherniavsky-Paskin
5

Dla csh i tcsh

some.exec >& out.txt
KeithB
źródło
dla tcsh masz równieżsome.exec |& less
Boatcoder
2

W Powershell jest dokładnie tak samo:

2> i 1 Wysyła błędy do get-process none, powershell 2> i 1
          strumień wyjściowy sukcesu.

(z about_Redirection).

W bashi ksh przynajmniej wiem też, że to działa w ten sposób.

Wydaje się, że jest to wspólna konwencja.

Szybkim sposobem, aby się o tym dowiedzieć, jest otwarcie strony podręcznika powłoki i wyszukiwanie &1(z, /a następnie pisanie &1). Zdarza się to rzadko w innych kontekstach.

Joey
źródło
2

W bash robisz dokładnie to samo.

./some_exec > out 2>&1
Bjarke Freund-Hansen
źródło