Заголовок сценария awk: #! / bin / bash или #! / bin / awk -f? - PullRequest
4 голосов
/ 12 января 2011

В файле awk, например, example.awk, заголовок должен быть #!/bin/bash или #!/bin/awk -f?

Причина моего вопроса в том, что, если я попробую эту команду в консоли, я получу правильный файл file.txt с «строкой текста»:

 awk 'BEGIN {print "line of text"}' >> file.txt

но если я попытаюсь выполнить следующий файл с ./example.awk:

#! /bin/awk -f
awk 'BEGIN {print "line of text"}' >> file.txt

возвращает ошибку:

$ ./awk-usage.awk
awk: ./awk-usage.awk:3: awk 'BEGIN {print "line of text"}' >> file.txt
awk: ./awk-usage.awk:3:     ^ invalid char ''' in expression

Если я изменю заголовок на #!/bin/bash или #!/bin/sh, это сработает.

В чем моя ошибка? В чем причина этого?

Ответы [ 2 ]

7 голосов
/ 12 января 2011

Поскольку вы явно запускаете команду awk, вы должны использовать #!/bin/bash.Вы можете использовать #!/bin/awk, если удалили команду awk и включили только программу awk (например, BEGIN {print "line of text"}), но затем вам нужно добавить к file, используя синтаксис awk (print ... >> file).

awk -f принимает файл, содержащий скрипт awk, так что здесь все совершенно неправильно.

2 голосов
/ 12 января 2011

Ваш сценарий является сценарием оболочки, который содержит команду awk.

#! /bin/sh говорит вашей оболочке выполнить файл как команду оболочки с /bin/sh - и это команда оболочки. Если вы замените это на #! /bin/awk -f, то файл будет выполнен с использованием awk, в основном, так же, как и выполнение

/bin/awk -f awk 'BEGIN {print "line of text"}' >> file.txt 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...