Comment combiner stdout et stderr pour différents coques?

18

Je connais la réponse pour certains obus, par exemple avec cmd.exevous pouvez:

some.exe > out.txt 2>&1

Comment obtenez-vous la même chose pour d'autres shells (bash, ksh, tcsh, powershell, etc.)?

pesche
la source

Réponses:

16

Coquille de poisson

Pour rediriger à la fois la sortie standard et l'erreur standard vers le fichier all_output.txt, vous pouvez écrire:

echo Hello > all_output.txt ^&1
Gringo Suave
la source
3
si la sortie passe à la commande suivante, utilisez 2> | à la place: echo Hello 2> | moins
Jeffrey04
La syntaxe de la tuyauterie peut avoir changé. Ma coquille de poisson utilise la même syntaxe "^ & 1" pour les deux.
Keith Bentrup
2>&1fonctionne également - ^est essentiellement le raccourci du poisson pour >2. Notez que 2>| lessou ^| lesspar lui-même les tuyaux ne sont que stderr; pour canaliser à la fois notre et err, faire^&1 | less
Beni Cherniavsky-Paskin
Des raccourcis de syntaxe pour rediriger / rediriger et errer sont toujours en discussion github.com/fish-shell/fish-shell/issues/110
Beni Cherniavsky-Paskin
5

Pour csh et tcsh

some.exec >& out.txt
KeithB
la source
pour tcsh, vous avez aussisome.exec |& less
boatcoder
2

Dans Powershell, c'est exactement la même chose:

2> & 1 Envoie des erreurs au processus d'obtention aucun, PowerShell 2> & 1
          flux de sortie de succès.

(à partir de about_Redirection).

Dans bashet ksh au moins, je sais aussi que cela fonctionne de cette façon.

Cela semble être une convention commune.

Un moyen rapide de le découvrir est d'ouvrir la page de manuel du shell et d'effectuer une recherche &1(avec /puis en tapant &1). Cela se produit rarement dans d'autres contextes.

Joey
la source
2

En bash, vous faites exactement la même chose.

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