Неверный код выхода 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 
  • Скопировать содержимое одного скрипта в другой скрипт
  • Сравните два раза в формате HH: MM: SS - ksh
  • Как grep / print значение ключа в json, которое хранится в переменной?
  • Как перемещать файлы с тем же именем и объединяться
  • Использование ввода двух разных файлов в цикле for
  • Подключение 3 соединений OpenVPN через скрипт оболочки
  • Очистить содержимое файла
  • Как я могу захватить stdout / stderr в файле, но все еще вижу его в моей консоли?
  • Как получить IP-адрес с помощью сценария оболочки?
  • Использование grep с шаблоном, который содержит переменную, подлежащую расширению
  • Создавать древовидную структуру каталога клонирования и копировать файлы в соответствующие каталоги, измененные после определенной даты
  • Linux и Unix - лучшая ОС в мире.