Question Redirection de bash stdout / stderr vers deux endroits?


Celui-ci me harcèle depuis un moment maintenant. Est-il possible de rediriger stdout et stderr à la fois la sortie du terminal et à un programme?

Je comprends qu'il 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 sortie du terminal ... c'est sûrement possible (je sais ce que c'est possible avec zsh ...)


31
2018-03-22 10:05


origine


Réponses:


Vous pouvez utiliser un canal nommé, qui correspond 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, dans Bash:

command_that_writes_to_stdout | tee >(command_that_reads_from_stdin)

31
2018-03-22 12:41



Est-il possible de rediriger stdout et stderr vers la sortie du terminal et vers un programme?

Je ne sais pas combien il est utile 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
2018-03-22 10:15



Je ne sais pas vraiment si TextMate peut prendre un fichier à éditer comme entrée standard, cela semble un peu bizarre. Je pense que vous voudriez envoyer le stdout / stderr à un fichier et le modifier ici, auquel cas vous avez besoin de:

progname 2>&1 | tee tempfile ; textmate tempfile

le 2>&1 redirige stderr (handle de fichier 2) pour aller au même endroit que stdout (descripteur de fichier 1) pour que les deux se retrouvent dans un seul flux. le tee commande écrit alors que pour tempfile aussi bien que stdout.

Une fois le processus terminé, l'éditeur est appelé dans le fichier temporaire.

S'il peut accepter une entrée standard pour l'édition, utilisez:

progname 2>&1 | tee /dev/tty | textmate

2
2018-03-22 12:38