So come reindirizzare a un file e usare tee; a livello base. Così
$ 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 domanda è: cosa scrivere al posto dei punti interrogativi per ottenere l'output di seguito:
$ outanderr ???; echo "-- file contents --" && cat file
# redirect both to a file, display stderr
stderr
-- file contents --
stdout
stderr
Constaints:
- Supponendo bash.
- L'ordine dovrebbe essere mantenuto nel file.
- i contenuti di stderr vengono visualizzati in tempo reale riga per riga, ovvero senza buffering.
- È possibile utilizzare file di script separati.
- La magia può essere necessaria.
outanderr
è solo un alias che stampa una riga su stdout e un'altra su stderr. L'idea (se possibile) è quella di costruire una soluzione generica che possa funzionare con qualsiasi programma, senza modificarli.
outanderr
hai del programma?