Определите, является ли вывод stdout или stderr

11975
Rauffle

Как я могу определить, является ли процесс выводом stdout или stderr?

19

4 ответа на вопрос

20
RedGrittyBrick

Я знаю только три способа определить, что программа выведет в STDOUT, а что в STDERR.

  1. Прочитайте документацию. Или же

  2. Эксперимент с перенаправлением?

  3. печать STDERR красным

†Например:

program > program.stdout 2> program.stderr

Затем посмотрите на два выходных файла, чтобы увидеть, что программа записала в STDOUT и что она написала в STDERR.

Вместо перенаправления вы можете направить трубку, teeесли вам нужен вывод для продолжения на экран, а также в файл. См. Https://stackoverflow.com/q/692000/477035

Я обычно использую вариант 3: `program | grep .` печатает STDOUT красным цветом. Dennis 11 лет назад 13
Печать в красном - это именно то, что я искал. Спасибо RedGrittyBrick & Деннис Rauffle 11 лет назад 0
5
zebediah49

На основании вашего комментария запроса:

{ { command; } 2>&3 | sed 's/^/STDOUT: /'; } 3>&1 1>&2 | sed 's/^/STDERR: /' 
Выглядит впечатляюще. Но не могли бы вы добавить вишни к своему дереву и объяснить, что оно делает? Не все здесь являются гуру - и ваша конструкция довольно сложна;) Izzy 11 лет назад 3
Скобки для заказа. Я на самом деле получил эту точную форму из "я забыл-где", но смысл в том, чтобы использовать дополнительные файловые дескрипторы (помимо 1 = `stdout` и 2 =` stderr`), чтобы получить вывод внутреннего набора скобок, и запустить ` stdout` через одну команду `sed`, в то время как` stderr` проходит через другую. zebediah49 11 лет назад 0
Вот это да. Не знал использовать эти дополнительные дескрипторы. Сначала я был немного смущен (мне нравится понимать, что я бегу - и меня немного путают с фигурными скобками). Но теперь понятно - и ИМХО именно то, что хотел ОП. Так что +1 от меня :) Izzy 11 лет назад 0
Это помогло мне. Я хотел добавить больше данных в stderr. Это делает это и правильно выводит все обратно на stdout / stderr. `{{{ 2> & 3; } 3> & 1 1> & 2 | awk '' 1> & 3; } 3> & 2 2> & 1; } ` Bryan Drewery 11 лет назад 0
0
Hennes

Если вы хотите сделать это один раз, перенаправьте один из них в другое место.

Пример перенаправления стандарта с >.

ls -al> ls-l.txt (любой вывод здесь не из stdout, если вы видите что-то, это должен быть вывод stderr)

Для перенаправления stderr используйте 2>

Процесс создает постоянный поток вывода, некоторые для stdout, некоторые для stderr. Я хочу определить, какие именно, поскольку этот вывод идет на экран Rauffle 11 лет назад 0
0
magna_nz

Вы можете просто перенаправить stderr в файл, и если что-то в нем обнаружится, это из stderr.

например ls -a 2> ls-all.txt

если по какой-либо причине была отправлена ​​ошибка в stderr, она будет перенаправлена ​​в этот файл.

Похожие вопросы