Wie kombiniere ich stdout und stderr für verschiedene Shells?

18

Ich kenne die Antwort für einige Muscheln, zB bei cmd.exeIhnen können:

some.exe > out.txt 2>&1

Wie erreicht man dasselbe für andere Shells (bash, ksh, tcsh, powershell usw.)?

pesche
quelle

Antworten:

16

Fischmuschel

Um sowohl die Standardausgabe als auch den Standardfehler in die Datei all_output.txt umzuleiten, können Sie Folgendes schreiben:

echo Hello > all_output.txt ^&1
Gringo Suave
quelle
3
Wenn die Ausgabe an den nächsten Befehl weitergeleitet wird, verwenden Sie 2> | stattdessen: hallo hallo 2> | weniger
Jeffrey04
Möglicherweise wurde die Pipingsyntax geändert. Mein Fischoberteil verwendet für beide die gleiche Syntax "^ & 1".
Keith Bentrup
2>&1funktioniert auch - ^ist im Wesentlichen die Abkürzung für Fisch >2. Beachten Sie, dass 2>| lessoder ^| lessfür sich nur stderr- Pipes ; um sowohl unsere als auch äh, tun^&1 | less
Beni Cherniavsky-Paskin
Syntax Kürzel zum Umleiten / Rohrleitungen sowohl aus und err sind noch in der Diskussion github.com/fish-shell/fish-shell/issues/110
Beni Cherniavsky-Paskin
5

Für csh und tcsh

some.exec >& out.txt
KeithB
quelle
für tcsh hast du auchsome.exec |& less
boatcoder 27.01.11
2

In Powershell ist es genau das gleiche:

2> & 1 Sendet Fehler an den Get-Prozess none, Powershell 2> & 1
          Erfolgsausgabestrom.

(von about_Redirection).

bashZumindest in und ksh weiß ich auch, dass es so funktioniert.

Es scheint eine übliche Konvention zu sein.

Eine schnelle Möglichkeit, dies herauszufinden, besteht darin, die Manpage der Shell zu öffnen und zu suchen &1(mit /und dann zu tippen &1). In anderen Kontexten tritt dies selten auf.

Joey
quelle
2

In Bash machst du genau dasselbe.

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