Me gustaría tener la stdout de un comando replicado en stderr también en bash. Algo como:Duplicar stdout a stderr
$ echo "FooBar" (...)
FooBar
FooBar
$
donde (...) es la expresión de redirección. ¿Es eso posible?
Me gustaría tener la stdout de un comando replicado en stderr también en bash. Algo como:Duplicar stdout a stderr
$ echo "FooBar" (...)
FooBar
FooBar
$
donde (...) es la expresión de redirección. ¿Es eso posible?
Uso tee con/dev/stderr:
echo "FooBar" | tee /dev/stderr
o usar awk/Perl/Python que hacer manualmente la replicación:
echo "FooBar" | awk '{print;print > "/dev/stderr"}'
echo "FooBar" | perl -pe "print STDERR, $_;"
coma innecesaria después de STDERR en el ejemplo perl – Znik
que es más portátil en todos los SO y en Shells? 'tee/dev/stderr' o' tee> (cat> & 2) '? –
Apostaría que este último es más compatible con múltiples plataformas, ya que '/ dev/stderr' no está disponible en todas las distribuciones. – Qix
Para redireccionar a stderr, usaría >&2
o >/dev/stderr
. Para replicar la salida, usaría tee
. El inconveniente de esto es que se necesita un archivo temporal:
echo "FooBar" | tee /tmp/stdout >&2 ; cat /tmp/stdout
mal. usted tiene la oportunidad de obtener un gran flujo y completar completamente el dispositivo/tmp, generalmente conectado al sistema de archivos/root. – Znik
@Znik - '/ tmp/stdout' es solo un ejemplo. Siéntase libre de reemplazar ese nombre de archivo con lo que sea más apropiado en su contexto. – mouviciel
uso proceso de sustitución: 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 del nombre de archivo >(cat)
y puede redireccionar el resultado de este proceso a stderr >(cat >&2)
.
Esta es una buena solución para sistemas operativos como OS X, que no tiene el sistema de archivos/proc. – Meow
echo "FooBar" |tee /dev/stderr
tee: /dev/stderr: Permission denied
que no trabajan con RedHat 6,3
echo "FooBar" | (read A ; echo $A ; echo $A >&2)
está trabajando
lo siento, explicación agregada ;-) – defdefred
Ver [¿Cómo puedo enviar la salida estándar a varios comandos?] (Http://unix.stackexchange.com/questions/28503/how-can-i-send-stdout-to-multiple-commands) –