Имея простой скрипт:

echo "file: $0"

когда вызывается так:

bash myscript.sh

или же

./myscript.sh

дает имя файла скрипта (file: myscript.sh), как и ожидалось, но при вызове:

источник myscript.sh

или же

, ./myscript.sh

дает имя оболочки (bash) вместо имени файла скрипта.

Почему это так?

1 ответ1

2

Первый вызов запустит новый экземпляр bash для интерпретации скрипта, что означает, что bash установит $0 на его путь.

Второй вызов будет рассматривать файл как исполняемый файл и запускать его, поэтому $0 будет указывать на него.

Последние два вызова загрузят файл в текущий экземпляр bash, поэтому $0 будет указывать на него.

NB: для файла № 2 нужен исполняемый файл, а для файлов № 1, № 3 и № 4 - нет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .