Поиск — это не то же самое, что выполнение. В частности, источник ожидает список команд, которые могут быть выполнены в текущей оболочке. Следующее взято изhelp.
:
Баша.
.:. filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The entries in $PATH are used to find the directory containing FILENAME. If any ARGUMENTS are supplied, they become the positional parameters when FILENAME is executed.
Итак, когда вы запустите . file
, ваша оболочка прочитает файл и выполнит каждую найденную команду. Однако это означает, что строка shebang игнорируется и обрабатывается как обычный комментарий. Следовательно, ваша оболочка, а не awk, пыталась выполнить BEGIN
.
Чтобы избежать этого, вы должны выполнить скрипт, а не искать его. Если по какой-то причине вам просто нужно получить его, напишите awk-команду в скрипте:
awk '
BEGIN { }
{ }
END { }'
Затем вы можете сделать
ls |../a.awk
Хотя на самом деле я не могу понять, зачем тебе это вообще.
Кроме того, вы должны знать, что.
(или source
в bash )по умолчанию ищет имена файлов в вашем $PATH
. Итак, если вы запустите . foo
и у вас есть файл foo
в текущем каталоге и файл foo
в любом каталоге в вашем $PATH
, тогда файл, который будет получен, будет файлом в вашем $PATH
а не тот, что в вашем текущем каталоге. Чтобы избежать этого, всегда используйте полные пути при поиске:../foo
.