Привет чокаво.

Ребенок щас вопрос задал — пап, а в чем разница? Этож одно и то же?

source script.sh
. script.sh
./script.sh

В первых двух случаях, да это одно и то же. Source и точка, это идентичные команды. Точка сделана для краткости.

Команда source и точка, используется для выполнения команд из файла в текущем сеансе оболочки.

VAR="bashdays"

source script.sh
. script.sh

Передаем в скрипт переменную VAR, по итогу если в скрипте сделать echo $VAR, то на экран выведется слово — bashdays.

Если же сделать так:

VAR="bashdays"

./script.sh

Нихуя не выведется и даже не запустится если нет атрибута +x.

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

Чтобы это заработало нужно сделать:

export VAR="bashdays"
./script.sh

Ну и захуячить chmod +x script.sh, тогда все взлетит.

В случае с source и точка, эти пиздострадания не нужны. Не нужно ничего экспортировать, выставлять +x и добавлять shebang.

Когда это и где применять?

  • Используем source и точку для скриптов, которые должны изменить текущее окружение.

  • Используем ./script.sh для независимого выполнения скрипта.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Ничего больше нового не скажу. Теперь и ты это знаешь.