Подтвердить что ты не робот

Перенаправление bash stdout/stderr в два места?

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

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

4b9b3361

Ответ 1

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

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

Или, в Bash:

command_that_writes_to_stdout | tee >(command_that_reads_from_stdin)

Ответ 2

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

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

input_prog 2>&1 | tee /dev/tty | my_editor

Ответ 3

Я действительно не знаю, может ли 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