Je sais comment rediriger vers un fichier et utiliser tee; au niveau de base. Donc
$ alias outanderr='bash -c "echo stdout >&1; echo stderr >&2"'
# A fake "application" displaying both output and error messages.
$ outanderr 1>file # redirect stdout to a file, display stderr
stderr
$ outanderr 2>file # redirect stderr to a file, display stdout
stdout
$ outanderr 1>file 2>&1 # redirect both to a file, display nothing
$ outanderr | tee file; echo "-- file contents --" && cat file
# redirect stdout to a file, display both (note: order is messed up)
stderr
stdout
-- file contents --
stdout
$ outanderr 2>&1 | tee file; echo "-- file contents --" && cat file
# redirect both to a file, display both
stdout
stderr
-- file contents --
stdout
stderr
La question est: quoi écrire à la place des points d'interrogation pour obtenir la sortie ci-dessous:
$ outanderr ???; echo "-- file contents --" && cat file
# redirect both to a file, display stderr
stderr
-- file contents --
stdout
stderr
Constaints:
- En supposant que bash.
- La commande doit être conservée dans le dossier.
- le contenu de stderr est affiché en temps réel ligne par ligne, c'est-à-dire sans mise en mémoire tampon.
- Des fichiers de script distincts peuvent être utilisés.
- La magie peut être nécessaire.
outanderr
c'est juste un alias qui imprime une ligne vers stdout et une autre vers stderr. L'idée (si c'est possible) est de construire une solution générique qui pourrait fonctionner avec n'importe quel programme, sans les modifier.
outanderr
avez-vous sur le programme?