Rediriger bash stdout / stderr vers deux endroits?
Celui-ci m'embête depuis un moment maintenant. Est-il possible de rediriger stdout
et stderr
vers la sortie du terminal et vers un programme?
Je comprends que c'est possible de rediriger les sorties vers un fichier et de stdout
avec tee
, mais je veux qu'il aille à un programme (mon éditeur [TextMate]) ainsi qu'à la borne de sortie... c'est sûrement possible (je sais que c'est possible avec zsh,...)
3 réponses
Vous pouvez utiliser un tube nommé, qui est destiné exactement à la situation que vous décrivez.
mkfifo some_pipe
command_that_writes_to_stdout | tee some_pipe \
& command_that_reads_from_stdin < some_pipe
rm some_pipe
Ou, en Bash:
command_that_writes_to_stdout | tee >(command_that_reads_from_stdin)
Est-il possible de rediriger stdout et stderr vers la sortie du terminal et Vers un programme?
Je ne suis pas sûr de l'utilité de combiner stdout et stderr sur l'entrée d'un éditeur, mais est-ce que quelque chose comme ça fait ce dont vous avez besoin?
input_prog 2>&1 | tee /dev/tty | my_editor
Je ne sais pas si TextMate peut prendre un fichier à éditer comme entrée standard, cela semble un peu bizarre. Je soupçonne que vous voudriez envoyer le stdout / stderr à un fichier et l'éditer là, auquel cas vous avez besoin de:
progname 2>&1 | tee tempfile ; textmate tempfile
Le 2>&1
redirige stderr
(Fichier handle 2) pour aller au même endroit que stdout
(Fichier handle 1) afin que les deux se retrouvent dans un seul flux. La commande tee
écrit alors cela dans {[6] } ainsi que stdout
.
Ensuite, une fois le processus terminé, le editor est appelé sur le fichier temporaire.
S'il peut accepter l'entrée standard pour l'édition, utilisez:
progname 2>&1 | tee /dev/tty | textmate