Вызов скрипта bash

Вызов скрипта bash

Имея простой сценарий:

echo "file: $0"

при вызове следующим образом:

bash мойскрипт.sh

или

./myscript.sh

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

исходный файл myscript.sh

или

. ./myscript.sh

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

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

решение1

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

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

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

Примечание: для пункта 2 необходимо, чтобы файл был исполняемым, а для пунктов 1, 3 и 4 — нет.

Связанный контент