Как сказал @Snakienn, вы можете / должны использовать "." встроенная команда для «источника» файла, содержащего команды; например,
. ./my_script.sh
Для этого нужно временно изменить, откуда оболочка читает команды. Команды и другие входные данные оболочки читаются из файла, как если бы они читались из терминала. Когда оболочка достигает конца файла, она переключается обратно на получение ввода с консоли.
Это называется "источником". (Не "execing".) И действительно, оболочка принимает source
в качестве альтернативного имени для команды .
.
Команда exec
делает что-то совершенно другое. Как сказано в ручном вводе bash
:
exec [-cl] [-a name] [command [arguments]]
Если указана команда, заменяет оболочку. Новый процесс не создан. Аргументы становятся аргументами команды.
Концепция и терминология exec
происходят из ранней UNIX (т.е. Unix V6 или более ранней), где системными вызовами для запуска дочерней команды были fork
и exec
. Процедура была:
fork
текущий процесс, создающий клон текущего процесса (дочерний)
- в дочернем процессе
exec
новая команда
- в родительском процессе, дождитесь завершения дочернего процесса