Comment puis-je utiliser la magie BASH pour y parvenir ?
Je veux uniquement voir la sortie stderr à l'écran,
mais je veux que stdout et stderr soient écrits dans un fichier.
Clarification :
Je veux que stdout et stderr se retrouvent dans le même fichier. Dans l'ordre où ils se produisent.
Malheureusement, aucune des réponses ci-dessous ne le fait.
Réponse acceptée :
Même sans aucune redirection, ou avec rien d'autre que >logfile 2>&1
, vous n'êtes pas assuré de voir la sortie dans l'ordre de génération.
Pour commencer, la sortie standard de l'application sera mise en mémoire tampon (vers tty) ou mise en mémoire tampon (vers un pipeline), mais stderr n'est pas mise en mémoire tampon, de sorte que les relations entre l'ordre de sortie sont rompues en ce qui concerne un lecteur. Les étapes suivantes de tout pipeline que vous pourriez concocter n'obtiendront pas un accès ordonné de manière déterministe aux deux flux (ce sont conceptuellement des choses qui se passent en parallèle, et vous êtes toujours soumis au planificateur - si au moment où votre lecteur obtient une tranche, l'écrivain a déjà écrit dans les deux canaux, vous ne pouvez pas dire lequel est venu en premier).
"[L]'ordre dans lequel ils se produisent" n'est vraiment connu que de l'application. L'ordre de sortie sur stdout/stderr est un problème bien connu - classique, peut-être -.