Из руководства:
Иногда процесс args будет недоступен; когда это происходит,
ps
вместо этого распечатает исполняемое имя в скобках.
Сохраните состояние в переменной и используйте его в END
блок.
awk -F: 'NF != 7 {print; err = 1}
END {exit err}' /etc/passwd
Это не соответствует точным требованиям OP, но если вы только заботитесь о коде возврата, и вам не нужно печатать совпадающие строки, аналогично grep -q
, затем вы можете изменить ответ @geekasur, чтобы выйти после первого совпадения, что для огромных входных файлов сэкономит время, если ошибка находится в начале файла. Надеюсь, /etc/passwd
вам не подходит!
awk -F: 'NF != 7 {err = 1; exit;}
END {exit err}' /etc/passwd
; echo $?
после этого awk оператора. Однакоecho $?
никогда не выполняется потому чтоEND {exit err}'
завершает сценарий. Существует ли способ установить статус возврата без выхода? – Stefan Lasiewski 13.07.2011, 20:38exit err
завершает awk, он не завершает сценарий. Вы имеетеset -e
в том сценарии, случайно? Если так, Вы сказали оболочке выходить, если команда возвращает ненулевое состояние; если Вы хотите протестировать состояние, использоватьif awk …; then echo ok; else echo fail; fi
. – Gilles 'SO- stop being evil' 14.07.2011, 01:50set -e
набор. Это объясняет странное поведение, которое я вижу. Спасибо за указание на это. – Stefan Lasiewski 14.07.2011, 02:21