Selon " Linux: la référence complète 6ème édition " (p. 44), vous pouvez tuyer uniquement STDERR en utilisant le |&
symboles de redirection.
J'ai écrit un script assez simple pour tester ceci:
#!/bin/bash
echo "Normal Text."
echo "Error Text." >&2
J'exécute ce script comme celui-ci:
./script.sh |& sed 's:^:\t:'
Vraisemblablement, seules les lignes imprimées à stardr seront en retrait. Cependant, cela ne fonctionne pas comme ça, comme je le vois:
Normal Text.
Error Text.
Qu'est-ce que je fais mal ici?
|&
pipes stardr à stdin, comme 2>&1 |
, le programme suivant sera donc à la fois sur STDIN.
$cat test.sh
#!/bin/bash
echo "Normal Text."
echo "Error Text." >&2
$./test.sh | sed 's:^:\t:'
Error Text.
Normal Text.
$ ./test.sh |& sed 's:^:\t:'
Normal Text.
Error Text.
|&
dans Bash n'est qu'un raccourci (non terriblement portable) pour 2>&1 |
, vous devriez donc voir chaque ligne en retrait.