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,...)

31
demandé sur Benjamin W. 2009-03-22 13:05:17

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)
31
répondu JasonSmith 2009-03-22 18:44:07

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
18
répondu CB Bailey 2009-03-22 13:27:06

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
2
répondu paxdiablo 2009-03-22 13:12:31