sysout - vars bash
Duplicar stdout a stderr (5)
Para redireccionar a stderr, usaría >&2
o >/dev/stderr
. Para replicar la salida, usaría tee
. El inconveniente es que se necesita un archivo temporal:
echo "FooBar" | tee /tmp/stdout >&2 ; cat /tmp/stdout
Me gustaría que el stdout de un comando se repita en stderr también en bash. Algo como:
$ echo "FooBar" (...)
FooBar
FooBar
$
donde (...) es la expresión de redirección. ¿Es eso posible?
Si puedo expandir la respuesta de @defdefred , para líneas múltiples que estoy usando
my_commmand | while read line; do echo $line; echo $line >&2; done
Tiene la "ventaja" de no requerir / llamar a tee
y usar incorporaciones.
Use tee con / dev / stderr:
echo "FooBar" | tee /dev/stderr
o use awk / perl / python para hacer la replicación manualmente:
echo "FooBar" | awk ''{print;print > "/dev/stderr"}''
echo "FooBar" | perl -pe "print STDERR, $_;"
Utilice la sustitución de procesos: http://tldp.org/LDP/abs/html/process-sub.html
echo "FooBar" | tee >(cat >&2)
Tee toma un nombre de archivo como parámetro y duplica la salida a este archivo. Con la sustitución de procesos puede usar un proceso en lugar de nombre de archivo >(cat)
y puede redirigir el resultado de este proceso a stderr >(cat >&2)
.
echo "FooBar" |tee /dev/stderr
tee: /dev/stderr: Permission denied
no funciona con RedHat 6.3
echo "FooBar" | ( read A ; echo $A ; echo $A >&2)
está trabajando