Запуск файла awk из сценария оболочки без указания точного местоположения awk - PullRequest
4 голосов
/ 26 августа 2011

Я пытаюсь отладить скрипт оболочки, который вызывает файл awk. Это ночной кошмар, потому что я никогда не использовал его раньше, и я не очень хорошо знаю Linux, но в любом случае

Разработчик создал файл awk и пытается запустить его в сценарии оболочки.

Чтобы попытаться запустить его из отдельного места, без необходимости указывать точное местоположение, они помещают скрипт awk в папку, которая находится в переменной PATH. Так что файл awk должен быть доступен везде, верно?

Когда вы запускаете это так ...

awk -f script.awk arg1

... может ли awk найти этот скрипт? Он выдает ошибку, когда скрипт оболочки пытается выполнить эту команду awk:

awk: fatal: невозможно открыть исходный файл `script.awk 'для чтения (нет такого файла или каталога)

Ответы [ 2 ]

7 голосов
/ 26 августа 2011

Как вы знаете, awk не может найти сам скрипт.

Если скрипт помечен как исполняемый, и если у вас есть команда which, то вы сможете выполнить:

awk -f `which script.awk` arg1

В качестве альтернативы, а возможно, и лучше, превратить скрипт в исполняемый файл:

#!/usr/bin/awk -f 
BEGIN { x = 23 }
      { x += 2 }
END   { print x }

Шебангу нужна опция '-f' для работы на MacOS X 10.7.1, где я ее тестировал:

$ script.awk script.awk
31
$

Это дает вам автономное решение для одного файла.

2 голосов
/ 26 августа 2011

Нет, это не сработает.Для запуска awk нужен путь к сценарию, он не будет использовать переменную PATH для его поиска.PATH используется только для поиска исполняемых файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...