Eu não sei qual texto seu livro usa, mas o manual do bash está claro (se você já conhece um pouco os redirecionamentos):
If
|&
is used, command1’s standard error, in addition to its standard output, is connected to command2’s standard input through the pipe; it is shorthand for2>&1 |
. This implicit redirection of the standard error to the standard output is performed after any redirections specified by the command.
Portanto, se você não quiser misturar a saída padrão e o erro padrão, será necessário redirecionar a saída padrão para outro local. Veja Como grep stream de erro padrão (stderr)?
{ ./script.sh 2>&1 >&3 | sed 's:^:\t:'; } 3>&1
No entanto, os dois fd 1 e 3 de script.sh
e sed
apontarão para o destino stdout original. Se você quer ser um bom cidadão, pode fechar aqueles fd 3 que esses comandos não precisam:
{ ./script.sh 2>&1 >&3 3>&- | sed 's:^:\t:' 3>&-; } 3>&1
bash
e ksh93
podem condensar o >&3 3>&-
para >&3-
(fd move).