Перенаправить bash stdout / stderr в два места? - PullRequest
32 голосов
/ 22 марта 2009

Этот уже давно меня беспокоит. Можно ли перенаправить stdout и stderr на оба выхода терминала и в программу?

Я понимаю, что можно перенаправить выходные данные в файл и на stdout с помощью tee, но я хочу, чтобы он пошел в программу (мой редактор [TextMate]), а также вывод терминала… конечно, это возможно (я знаю, что это возможно с zsh…)

Ответы [ 3 ]

31 голосов
/ 22 марта 2009

Вы можете использовать именованный канал, который предназначен именно для описанной вами ситуации.

mkfifo some_pipe
command_that_writes_to_stdout | tee some_pipe \
  & command_that_reads_from_stdin < some_pipe
rm some_pipe

Или, в Баш:

command_that_writes_to_stdout | tee >(command_that_reads_from_stdin)
20 голосов
/ 22 марта 2009

Можно ли перенаправить stdout и stderr как на выход терминала, так и на программу?

Я не уверен, насколько полезно комбинировать stdout и stderr на входе в редактор, но делает ли что-то подобное, что вам нужно?

input_prog 2>&1 | tee /dev/tty | my_editor
2 голосов
/ 22 марта 2009

На самом деле я не знаю, может ли TextMate взять файл для редактирования в качестве стандартного ввода, что кажется немного странным. Я подозреваю, что вы захотите отправить stdout / stderr в файл и отредактировать его там, в этом случае вам нужно:

progname 2>&1 | tee tempfile ; textmate tempfile

2>&1 перенаправляет stderr (дескриптор файла 2) для перехода в то же место, что и stdout (дескриптор файла 1), так что оба они оказываются в одном потоке. Команда tee затем записывает это в tempfile, а также stdout.

Затем, после завершения процесса, вызывается редактор временного файла.

Если он может принять стандартный ввод для редактирования, используйте:

progname 2>&1 | tee /dev/tty | textmate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...