Con un bash reciente, puede usar la sustitución de procesos.
foo 2> >(tee stderr.txt)
Esto solo envía stderr a un programa que ejecuta tee.
Más portátil
exec 3>&1
foo 2>&1 >&3 | tee stderr.txt
Esto hace que el descriptor de archivo 3 sea una copia de la salida estándar actual (es decir, la pantalla), luego configura la canalización y ejecuta foo 2>&1 >&3
. Esto envía el stderr de foo al mismo lugar que el stdout actual, que es la tubería, luego envía el stdout a fd 3, la salida original. La tubería alimenta el stderr original de foo to tee, que lo guarda en un archivo y lo envía a la pantalla.