LinuxForum.Fans
Тема

[Решено] Странное замечание препода, помогите разобраться

Автор: cadovvl 6 сообщений 1405 просмотров
#55398

Сегодня на экзамене столкнулся с внезапным открытием, что оказывается терминальные комманды
./script.sh
и
. ./script.sh
имеют какое-то различие. Эксперементально одно отличие выяснил : если в скрипте меняются глобальные переменные окружения, то в первом случае изменения происходят, а во втором - нет. Подскажите, пожалуйста, что на самом деле происходит, и откуда ожидать еще сюрпризов...

#55399

Пардон, наоборот: в первом переменные окружения не меняются, во втором меняются :rolleyes:

#55412

Команда "." (точка) -- это команда source. Смотреть man bash на предмет source.
Т.е. ". ./script.sh" эквивалентно "source ./script.sh".

#55469
cadovvl написал:
./script.sh
и
. ./script.sh
имеют какое-то различие.

ещё-бы!
первая - это запуск ещё одного bash'а, который выполняет скрипт source.sh, при этом переменные не меняются в родительском bash'е.

вторая, это спец команда
source
т.к. её часто руками набирают, то конечно её сократили. работает просто - команды выполняются так, как будто вы их сами пишете, и конечно меняют переменные.

а название такое потому, что если из одного скрипта вызвать так другой, то источник (другой) как-бы вклеивается в файл, ну вроде замены source file.sh на содержимое этого файла в редакторе.

#55471
bormant написал:
Смотреть man bash на предмет source.

ну для этой - да. а вообще, для таких встроенных команд есть help.

text
help source
#55485

Спасибо

Войдите или зарегистрируйтесь, чтобы ответить.