ОК, поэтому source
скрипт запускается в текущей оболочке и .
отдельно, как описано, например, в сценарии с «.» И «исходным кодом» , но, в частности, в моем .bashrc
файле я имею:
[ -f ~/.bash_aliases ] && source ~/.bash_aliases
[ -f ~/.git-completion.bash ] && source ~/.git-completion.bash
[ -s ~/.autojump/etc/profile.d/autojump.sh ] && source ~/.autojump/etc/profile.d/autojump.sh
Могу ли я заменить это на:
[ -f ~/.bash_aliases ] && . ~/.bash_aliases
[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash
[ -s ~/.autojump/etc/profile.d/autojump.sh ] && . ~/.autojump/etc/profile.d/autojump.sh
Будет ли это работать на OS X - это проблема "POSIX"?
Я попробовал и выше до сих пор , кажется , работать на Ubuntu (так они фактически работают с обоими source
и .
, то есть, они дают мне нужную функциональность в оболочке). Должен ли я выбрать один над другим, или я что-то упустил?
FWIW, на OS X, я исходный код .bashrc
от моего .bash_profile
.
source
запускает скрипт в текущей оболочке и.
отдельно»? Они оба запускают его в текущей оболочке; иначе не было бы никакого смыслаОтветы:
Это определение POSIX в из
.dot
:Учитывая вышесказанное, вы можете также просто заменить ваши
[ -f ./file ] && source ./file
с. ./file
полностью. Если файла там нет, самое худшее, что может случиться, это то, что вы получите уведомление при входе в систему - вероятно, именно такую информацию вы хотели бы получить, я думаю.Конечно, если вы предпочитаете оставить тест, вы можете сделать:
источник
$_
, мне это нравится. :)test -f /.file && . $_
подход, показанный здесь$_
POSIX не стандартизируется. В 8 специальных параметров являются$@
,$*
,$#
,$$
,$!
,$?
,$-
и$0
.$_
это явно опущен . Ваш неправильный комментарий вызвал вопрос .В
bash
,.
иsource
являются синонимами. Глядя вbash
исходный код, файлbuiltin/source.def
, вы можете увидеть.
иsource
использовать ту же внутреннюю функциюsource_builtin
:Но
source
он не совместим с POSIX, поэтому если ваш скрипт вызывается с POSIX/bin/sh
, вы должны использовать.
вместоsource
. Поскольку POSIX не ограничивает оболочку, все вышеприведенные сценарии будут работать.Лично я всегда использую
.
вместоsource
. (Многие сценарии, которые я написал, работают подcron
).источник
.
как правило, «лучше», чем использованиеsource
, как говорит @abonet,source
поиск гораздо проще. Поскольку точки являются пунктуацией во многих языках, глазу просто пропустить их. Вот почему я предпочитаю использоватьsource
.