Это слово неаккуратно. nvm
- это просто функция оболочки, определяемая путем поиска файла, в котором эта функция определена. Это не меняет функцию каким-либо качественным образом: это была бы одна и та же функция со всеми одинаковыми поведением, если бы вы набрали ее вручную, поэтому применение «источника» в качестве модификатора немного вводит в заблуждение; было бы точнее сказать, что nvm.sh
- это сценарий источника, который определяет функцию оболочки с именем nvm
.
Что касается конкретного синтаксиса:
. somefile
является более портативным способом написать
source somefile
... который выполняет действия в somefile
в текущей оболочке, в отличие от отдельной оболочки, выполняемой как подпроцесс.
Таким образом, поиск сценария может изменить ваш текущий интерпретатор, установив переменные, изменив его рабочий каталог и, да, определяя псевдонимы и функции - способами, которые не выполняются внешней программой.
Для уточнения: Если вы запускали bash somefile
, то все функции, определенные somefile
существуют только в течение этого конкретного экземпляра bash
- когда он вышел и вернулся вас в строку, функция, определенная в somefile
бы не дольше быть доступным. В отличие от этого, когда вы source somefile
, потому что содержимое somefile
выполнено в вашем текущем экземпляре оболочки, это содержимое может сохраняться.
Если вы хотите знать, что делает функция с именем 'nvm', запустите' type nvm', чтобы напечатать свой текст после того, как он был определен –
BTW, я предполагаю в своем ответе, что вы знаете, что такое функция оболочки вообще , В настоящее время вопрос не дает понять, является ли это предположение обоснованным. –
Кроме того: если bash-специфичный, 'nvm.sh' неверно назван и должен быть вместо него' nvm.bash'; при использовании '.sh' в общем случае [весьма неудачно в лучшие времена] (https://www.talisman.org/~erlkonig/documents/commandname-extensions-considered-harmful/), это совершенно вредно, когда это ложно подразумевает совместимость с другими оболочками POSIX - ksh, dash, ash и т. д. - для сценария, который, не будучи вызванным через shebang, не может указать собственный интерпретатор. –