Неверный код выхода awk

Я пишу некоторые awk-скрипты для проверки данных. Они предназначены для выбора и вызова другими процессами, которые должны видеть код выхода из awk-скрипта, чтобы определить, был ли контент действительным или нет. Но у меня проблемы с чтением выхода из кода выхода:

Я написал этот скрипт, чтобы попытаться воспроизвести программу и запустить ее …

#!/bin/awk -f BEGIN { exit 1 } $ ./test.sh ; echo $? 0 

Я ожидал, что результатом станет 1. Сразу же подозревая, что awk ошибался, и я был прав, я попробовал это:

 $ awk 'BEGIN { exit 1 }' ; echo $? 1 

Таким образом, выход awk делает sem, чтобы делать то, что я хочу, но не при запуске из сценария shebang.

Затем я попытался:

 #!/bin/env awk -f BEGIN { exit 1 } $ ./test.sh ; echo $? 0 /bin/env: awk -f: No such file or directory 

Пока я мог это сделать ….

 #!/bin/sh awk 'BEGIN { exit 1 }' $ ./test.sh ; echo $? 1 

Затем я теряю все синтаксические выделения / манипуляции скрипта (более 200 строк) в vi.

Опять же, другой вариант:

 #!/bin/sh awk -f $1 exit $? 

Но для этого требуется также управление контуром awk-скрипта, а также исполняемый файл wrapping ($ {BASH_SOURCE [0]} работает только для bash).

В идеале я также хочу установить параметр «-W posix» для awk, но это добавляет дополнительные сложности!

Обновить

Запуск первого скрипта выше на OpenSuse 13 / awk 4.1.0 Я получаю ожидаемый результат (к сожалению, это фактически не решает проблему)

One Solution collect form web for “Неверный код выхода awk”

Вы не указали, на какой ОС вы работаете или на какую версию awk вы используете, но пытаясь воспроизвести вашу проблему на моем хосте Linux с помощью GNU awk (4.1.1), он отлично работает для меня. Данный:

 #!/bin/awk -f BEGIN { exit 1 } 

Который когда при размещении в файле test.sh приводит к:

 $ ./test.sh $ echo $? 1 

Я согласен с комментатором, который сказал, что test.sh – это странное имя для awk скрипта. Я бы пошел с расширением .awk чтобы было ясно, что это не сценарий оболочки.

Обновить

На RHEL 6.7:

 $ rpm -q redhat-release-server redhat-release-server-6Server-6.7.0.3.el6.x86_64 

С awk:

 $ awk --version GNU Awk 3.1.7 

Все кажется прекрасным. Сценарий:

 $ cat test.awk #!/bin/awk -f BEGIN {exit 1} 

Результат:

 $ ./test.awk $ echo $? 1 
  • Массовое создание файлов с bash
  • Как я могу получить версию vsftpd в переменной оболочки?
  • Есть ли способ сделать этот однострочный лайнер быстрее?
  • Escape [в grep
  • автоматизировать построение gnuplot с помощью bash
  • Как подсчитать значения, соответствующие определенному условию?
  • Проверьте, содержит ли переменная оболочки абсолютный путь
  • какая оболочка будет использовать sudo для выполнения сценария оболочки без строки shebang
  • Последний рабочий день месяца
  • Помощь при проверке выполнения предыдущей команды
  • Bash Script - ffmpeg не вызывается, как ожидалось
  • Linux и Unix - лучшая ОС в мире.