web-dev-qa-db-fra.com

Piping Sterdr vs. stdout

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?

24
Naftuli Kay

|& 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.
8
Kevin

|& dans Bash n'est qu'un raccourci (non terriblement portable) pour 2>&1 |, vous devriez donc voir chaque ligne en retrait.

1
jw013