Сегодня на экзамене столкнулся с внезапным открытием, что оказывается терминальные комманды
./script.sh
и
. ./script.sh
имеют какое-то различие. Эксперементально одно отличие выяснил : если в скрипте меняются глобальные переменные окружения, то в первом случае изменения происходят, а во втором - нет. Подскажите, пожалуйста, что на самом деле происходит, и откуда ожидать еще сюрпризов...
[Решено] Странное замечание препода, помогите разобраться
Пардон, наоборот: в первом переменные окружения не меняются, во втором меняются :rolleyes:
Команда "." (точка) -- это команда source. Смотреть man bash на предмет source.
Т.е. ". ./script.sh" эквивалентно "source ./script.sh".
./script.sh
и
. ./script.sh
имеют какое-то различие.
ещё-бы!
первая - это запуск ещё одного bash'а, который выполняет скрипт source.sh, при этом переменные не меняются в родительском bash'е.
вторая, это спец команда
source
т.к. её часто руками набирают, то конечно её сократили. работает просто - команды выполняются так, как будто вы их сами пишете, и конечно меняют переменные.
а название такое потому, что если из одного скрипта вызвать так другой, то источник (другой) как-бы вклеивается в файл, ну вроде замены source file.sh на содержимое этого файла в редакторе.
Смотреть man bash на предмет source.
ну для этой - да. а вообще, для таких встроенных команд есть help.
help sourceСпасибо