Avec un bash récent, vous pouvez utiliser la substitution de processus.
foo 2> >(tee stderr.txt)
Cela envoie simplement stderr à un programme en cours d'exécution.
Plus portable
exec 3>&1
foo 2>&1 >&3 | tee stderr.txt
Cela fait du descripteur de fichier 3 une copie de la sortie standard actuelle (c'est-à-dire l'écran), puis configure le canal et exécute foo 2>&1 >&3
. Cela envoie le stderr de foo au même endroit que le stdout actuel, qui est le tube, puis envoie le stdout à fd 3, la sortie d'origine. Le tuyau alimente le stderr original de foo to tee, qui l'enregistre dans un fichier et l'envoie à l'écran.