OK, więc source
uruchamia skrypt w bieżącej powłoce i .
osobno, jak opisano na przykład przy uruchamianiu skryptu za pomocą „.” I „source” , ale konkretnie w moim .bashrc
pliku mam:
[ -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
Czy mogę to zastąpić:
[ -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
Czy to zadziała w systemie OS X - czy to problem „POSIX”?
Próbowałem tego i powyższe wydaje się nadal działać na Ubuntu (więc one faktycznie działają z oboma source
i .
to znaczy dają mi pożądaną funkcjonalność w powłoce). Czy powinienem wybierać jeden nad drugim, czy coś mi brakuje?
FWIW, na OS X, czerpię moje .bashrc
z mojego .bash_profile
.
source
uruchamia skrypt w bieżącej powłoce i.
osobno”? Obaj uruchamiają go w bieżącej powłoce; inaczej nie byłoby sensuOdpowiedzi:
Jest to definicja POSIX jest od
.dot
:Biorąc pod uwagę powyższe, równie dobrze można po prostu wymienić
[ -f ./file ] && source ./file
się. ./file
całkowicie. Jeśli pliku nie ma, najgorsze, co się stanie, to dostaniesz powiadomienie przy logowaniu - prawdopodobnie jest to informacja, którą chciałbyś mieć.Oczywiście, jeśli wolisz zachować test, możesz:
źródło
$_
, że to lubię. :)test -f /.file && . $_
pokazanym tutaj podejściu$_
nie jest standaryzowany przez POSIX. Do 8 parametrów specjalne są$@
,$*
,$#
,$$
,$!
,$?
,$-
i$0
.$_
jest wyraźnie pominięty . Niepoprawny komentarz wywołał pytanie .W
bash
,.
isource
są synonimami. Przeglądającbash
kod źródłowy, plikbuiltin/source.def
, możesz zobaczyć.
isource
użyć tej samej funkcji wewnętrznejsource_builtin
:Ale
source
nie jest kompatybilny z POSIX, więc jeśli twój skrypt jest wywoływany z POSIX/bin/sh
, powinieneś użyć.
zamiastsource
. Ponieważ POSIX nie ogranicza powłoki, wszystkie powyższe skrypty będą działać.Osobiście zawsze używam
.
zamiastsource
. (Wiele skryptów, które napisałem, działa podcron
).źródło
.
jest zwykle „lepsze” niż używaniesource
, jak mówi @abonet,source
jest o wiele łatwiejsze do wyszukiwania. Ponieważ kropki są interpunkcyjne w wielu językach, łatwo jest je pominąć. Dlatego wolę używaćsource
.