Визначте, чи є вихід stdout або stderr


Відповіді:


22

Я знаю лише три способи визначити, яка програма виведе STDOUT, а що STDERR

  1. Прочитайте документацію. Або

  2. Експеримент із перенаправленням †

  3. друкувати STDERR червоним кольором

†Наприклад:

program > program.stdout 2> program.stderr

Потім подивіться на два вихідних файли, щоб побачити, що програма написала в STDOUT і що вона записала в STDERR.

Замість перенаправлення ви можете звернутися до каналу, teeякщо вам потрібен вихід, щоб продовжити на екран, а також у файл. Дивіться /programming//q/692000/477035


15
Я зазвичай використовую варіацію варіанту 3: program | grep .відбитки STDOUT в червоному кольорі.
Денніс

Друк червоним кольором - це саме те, що я шукав. Дякую RedGrittyBrick & Dennis
Rauffle

7

Виходячи з вашого коментованого запиту:

{ { command; } 2>&3 | sed 's/^/STDOUT: /'; } 3>&1 1>&2 | sed 's/^/STDERR: /'

3
Виглядає вражаюче. Але чи не проти ви додати вишню до свого дерева і пояснити, що це робить? Не всі тут гуру - і ваша конструкція зовсім небагато складна;)
Іззи

Дужки призначені для замовлення. Я фактично отримав таку точну форму з I-забуття-де, але сенс у використанні додаткових дескрипторів файлів (понад 1 = stdoutі 2 = stderr), щоб взяти висновок внутрішнього набору дужок і пропустити stdoutодну sedкоманду, поки stderrпроходить через інший.
zebediah49

Ого. Не знав використовувати ці додаткові дескриптори. Спочатку я трохи розгубився (мені подобається розуміти, що я бігаю - і трохи розгубився з фігурними брекетами). Але тепер зрозуміло - і ІМХО саме того, чого хотів ОП. Тож +1 від мене :)
Іззі

Це мені допомогло. Я хотів додати більше даних у stderr. Це робить це і належним чином виводить все назад на stdout / stderr. { { { { echo "stdout" ; echo "stderr">&2; } 2>&3; } 3>&1 1>&2 | awk '{print "ERROR:",$0}' 1>&3; } 3>&2 2>&1; }
Bryan Drewery

0

Ви можете просто перенаправити stderr на файл, і якщо в ньому щось з'явиться, це з stderr.

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

якщо виникла помилка з будь-якої причини, надісланої до stderr, вона буде переспрямована на цей файл.


-1

Якщо ви хочете зробити це один раз, переадресуйте один з них кудись інше.

Наприклад, стандарт переадресації на >.

ls -al> ls-l.txt (будь-який вихід тут не з stdout, якщо ви бачите що-небудь, він повинен бути більш жорстким)

Для більш жорсткого перенаправлення 2>


Процес створює постійний потік вихідних даних, деякі - для того, щоб викреслити, щоб збільшити. Я хочу визначити, що саме, як цей вихід виходить на екран
Rauffle
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.