Canalice stderr a archivo y pantalla sin redirigir stderr a stdout

0

En un script bash, me gustaría ejecutar un comando mientras canalizo el stderr a un archivo y al terminal. Sin embargo, quiero que stderr permanezca en el descriptor de archivo '2' para poder analizarlo desde un proceso externo que está llamando a este script bash.

Todas las soluciones que he visto hasta ahora implican intercambiar stdout con stderr y luego pasar a otro archivo, por ejemplo :

find /var/log 3>&1 1>&2 2>&3 | foo.file

Si voy a llamar a este script desde otro, el stderr irá a stdout y stdout irá a stderr, lo cual no es bueno para mí. He tratado de cambiarlos de nuevo así:

find /var/log 3>&1 1>&2 2>&3 | foo.file 4>&1 1>&2 2>&4

Pero esto no funciona.

Remolino
fuente

Respuestas:

1

Al final descubrí cómo hacerlo, siguiendo los consejos de esta página . Necesito redirigir stderr para teeluego redirigir la salida de teeregreso a stderr.

find /var/log 2> >(tee foo.file >&2)
Remolino
fuente
Debería funcionar, pero esperaría que stdout y stderr de se finddesincronizaran en el terminal a veces. Esto se debe a teealmacenamientos intermedios, etc. Si findescribe stdout y stderr directamente en el mismo dispositivo, el problema nunca ocurre; pero si las dos transmisiones se fusionan más tarde , es posible.
Kamil Maciorowski