У Вас есть другие правила в Вашем sudoers
файл, случайно? Правила применяются в порядке, поэтому если у Вас есть правило, разрешающее Вам выполнять команду с подсказкой пароля, сопровождаемой другим правилом, которое позволяет Вам выполнять команду без подсказки пароля, необходимо будет ввести пароль. Поместите правило без паролей сначала.
Посмотрите, Почему sudo говорит мне, что мой пароль является неправильным?
Указание BEGIN
не является лишним. Если не указать BEGIN
, то для каждой строки ввода будет выполняться print
.
Цитата из руководства:
Правило
BEGIN
выполняется только один раз, до того, как будет прочитана первая входная запись. прочитана. Аналогично, правилоEND
выполняется только один раз, после считывания всех входных данных. прочитаны.
$ seq 5 | awk 'BEGIN{print "Hello"}/4/{print}' # Hello printed once
Hello
4
$ seq 5 | awk '{print "Hello"}/4/{print}' # Hello printed for each line of input
Hello
Hello
Hello
Hello
4
Hello
$
awk[11790] выполняет каждый блок только тогда, когда шаблон до него совпадает. Пустой шаблон (просто блок) совпадает с каждой строкой. [11791]BEGIN[11792] и [11793]END[11794] - это специальные шаблоны, которые соответствуют началу и концу файла (аналогично значениям [11795]^[11796] и [11797]$[11798] в горизонтальном направлении).
Если вы хотите, чтобы что-то выполнялось до чтения файла, используйте [11799]BEGIN[11800]. Например, инициализация счетчиков или что-то в этом роде. [11801]END[11802] может затем собрать результаты.
.
awk
обрабатывает каждую строку ввода для выражений, заданных в теле, кроме блоков BEGIN
и END
. В случае блоков BEGIN
и END
, awk
обработает утверждения только один раз, до начала обработки ввода и после завершения обработки ввода соответственно. Без блока BEGIN
вы не только не сможете печатать одноразовую информацию, такую как заголовки, но и не сможете эффективно инициализировать некоторые переменные, необходимые телу. Также, к вашему сведению, программа awk
может иметь несколько блоков BEGIN
и END
.