Як я можу визначити, який процес виводить stdout або stderr?
Як я можу визначити, який процес виводить stdout або stderr?
Відповіді:
Я знаю лише три способи визначити, яка програма виведе STDOUT, а що STDERR
Прочитайте документацію. Або
Експеримент із перенаправленням †
†Наприклад:
program > program.stdout 2> program.stderr
Потім подивіться на два вихідних файли, щоб побачити, що програма написала в STDOUT і що вона записала в STDERR.
Замість перенаправлення ви можете звернутися до каналу, tee
якщо вам потрібен вихід, щоб продовжити на екран, а також у файл. Дивіться /programming//q/692000/477035
Виходячи з вашого коментованого запиту:
{ { command; } 2>&3 | sed 's/^/STDOUT: /'; } 3>&1 1>&2 | sed 's/^/STDERR: /'
stdout
і 2 = stderr
), щоб взяти висновок внутрішнього набору дужок і пропустити stdout
одну sed
команду, поки stderr
проходить через інший.
{ { { { echo "stdout" ; echo "stderr">&2; } 2>&3; } 3>&1 1>&2 | awk '{print "ERROR:",$0}' 1>&3; } 3>&2 2>&1; }
Якщо ви хочете зробити це один раз, переадресуйте один з них кудись інше.
Наприклад, стандарт переадресації на >
.
ls -al> ls-l.txt (будь-який вихід тут не з stdout, якщо ви бачите що-небудь, він повинен бути більш жорстким)
Для більш жорсткого перенаправлення 2>
program | grep .
відбитки STDOUT в червоному кольорі.