Piping à la fois stdout et stderr dans bash?

Il semble que les nouvelles versions de bash aient l’opérateur &> , qui (si j’ai bien compris) redirige les fichiers stdout et stderr vers un fichier ( &>> ajoute plutôt le fichier, comme Adrian l’a précisé).

Quelle est la manière la plus simple de réaliser la même chose, mais plutôt de passer à une autre commande?

Par exemple, dans cette ligne:

 cmd-doesnt-respect-difference-between-stdout-and-stderr | grep -i SomeError 

Je voudrais que le grep corresponde au contenu de stdout et de stderr (en fait, les combiner en un seul stream).

Remarque : cette question concerne la canalisation, et non la redirection – il ne s’agit donc pas d’une duplication de la question qu’elle contient actuellement.

    (Notez que le &>>file s’ajoute à un fichier alors que &> redirectait et écraserait un fichier existant précédemment.)

    Pour combiner stdout et stderr vous devez redirect ce dernier vers le premier en utilisant 2>&1 . Cela redirige stderr (descripteur de fichier 2) vers stdout (descripteur de fichier 1), par exemple:

     $ { echo "stdout"; echo "stderr" 1>&2; } | grep -v std stderr $ 

    stdout va à stdout, stderr va à stderr. grep ne voit que stdout , donc stderr imprime sur le terminal.

    D’autre part:

     $ { echo "stdout"; echo "stderr" 1>&2; } 2>&1 | grep -v std $ 

    Après avoir écrit à la fois sur stdout et sur stderr, 2>&1 redirige stderr vers stdout et grep voit les deux chaînes sur stdin, filtrant ainsi les deux.

    Vous pouvez en savoir plus sur la redirection ici .

    Concernant votre exemple (POSIX):

     cmd-doesnt-respect-difference-between-stdout-and-stderr 2>&1 | grep -i SomeError 

    ou, en utilisant >=bash-4 :

     cmd-doesnt-respect-difference-between-stdout-and-stderr |& grep -i SomeError 

    Bash a un raccourci pour 2>&1 | , à savoir |& , qui utilise à la fois stdout et stderr (voir le manuel ):

     cmd-doesnt-respect-difference-between-stdout-and-stderr |& grep -i SomeError 

    Cela a été introduit dans Bash 4.0, voir les notes de publication .