Мне было интересно, если следующие два способа запуска сценария bash эквивалентны?
. ./myScript.sh source myScript.sh
- Они оба запускают содержимое скрипта вместо того, чтобы запускать скрипт, т.е. не создают подоболочку для запуска скрипта?
26
man .
,man source
Или то , что я еще не знаю.type .
иhelp .
man $SHELL
,/source
Ответы:
Они эквивалентны в Bash в том, что они делают то же самое. С другой стороны,
source
он на 5 символов длиннее и не переносится на оболочки только для POSIX или Bourne, тогда как.
(точка) есть, поэтому я никогда не буду использовать егоsource
.Это правильно - получение файла запускает команды в текущей оболочке, и это повлияет на текущую среду оболочки. Вы по-прежнему можете передавать аргументы в исходный файл, и bash фактически будет искать
$PATH
имя файла, как обычная команда, если она не содержит косых черт.Не связано с первоначальным вопросом
.
противsource
, но в вашем примере,не идентичен
потому что пока
.
иsource
функционально идентичны,myScript.sh
а./myScript.sh
не одинаковы. Поскольку./myScript.sh
содержит косую черту, он интерпретируется как путь, а оболочка просто использует./myScript.sh
. ОднакоmyScript.sh
косой черты нет, поэтому оболочка сначала выполняет$PATH
поиск. Это стандартное поведение, определенное POSIX для.
. Большинство оболочек используют это по умолчанию, хотя они могут добавлять расширения (например, поиск в текущем рабочем каталоге после поиска пути) или опции, чтобы изменить поведение.
/source
.источник
/
зависит от оболочкиbash
иzsh
зависит от того, включен ли режим POSIX или нет. Также обратите внимание, что во многих реализациях ksh.
ведет себя иначе, чемsource
.Да, они эквивалентны. Там нет функциональной разницы;
.
это просто встроенный синоним дляsource
.(Edit: Видимо , это верно только для
bash
иzsh
некоторые легкие снаряды не имеют.source
, Только.
определяется POSIX такksh
,dash
,ash
и т.д. , могут не иметьsource
См. Ответ jw013 игровая для информации.)источник
$ alias .
выходыbash: alias: .: not found
.