Awk на самом деле не может видеть ввод от stderr - труба только трубы stdout. Тебе придётся обойтись с перенаправлением, чтобы делать то, что ты хочешь. Ответ очень прост, если вам не важно, что находится на stdout:
(ssh -v hostname somecommand > /dev/null) 2>&1 | awk '/debug1/ ...'
Если вы заботитесь о том, что находится на stdout, вам придется сделать что-то более сложное. Я считаю, что это будет работать:
((ssh -v hostname somecommand 1>&3) 2>&1 | awk '/debug1/ ...' 1>&2) 3>&1
В порядке, те перенаправления:
- перенаправить исходный стандартный вывод в сторону файлового дескриптора 3
- перенаправить stderr на стандартный вывод для awk, чтобы увидеть
- перенаправить стандартный вывод обратно в stderr (где он был изначально)
- перенаправить файловый дескриптор 3 обратно на стандартный вывод (где он был изначально)
P.S. Это решение зависит от sh / bash. Джонатан Леффлер говорит, что это должно работать и с ksh. Если вы используете другую оболочку, вы можете попытаться найти синтаксис для выполнения с ней тех же перенаправлений, но если эта другая оболочка - csh / tcsh, вы, вероятно, просто облажались. Общеизвестно, что cshells плохо работают с stdout / stderr.