OK, source
executa o script no shell atual e .
separadamente, conforme detalhado na execução de scripts com "." E "source", por exemplo, mas, especificamente, no meu .bashrc
arquivo, tenho:
[ -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
Posso substituir isso por:
[ -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
Isso funcionará no OS X - é esse o problema do "POSIX"?
Eu tentei e os itens acima ainda parecem funcionar no Ubuntu (então eles realmente funcionam com os dois source
e .
, isto é, eles me dão a funcionalidade desejada no shell). Devo escolher um sobre o outro, ou estou faltando alguma coisa?
FWIW, no OS X, eu procuro o meu .bashrc
no meu .bash_profile
.
source
executa o script no shell atual e.
separadamente"? Ambos o executam no shell atual; caso contrário, não haveria sentidoRespostas:
Esta é a definição do POSIX de
.dot
:Considerando o exposto, você também pode substituir o seu
[ -f ./file ] && source ./file
por. ./file
completo. Se o arquivo não estiver lá, o pior que acontecerá é que você receberá um aviso no login - o que provavelmente é a informação que você gostaria de ter, eu acho.Obviamente, se você preferir manter o teste, poderá:
fonte
$_
, eu gosto disso. :)test -f /.file && . $_
abordagem mostrada aqui #$_
não é padronizado pelo POSIX. Os 8 parâmetros especiais são$@
,$*
,$#
,$$
,$!
,$?
,$-
e$0
.$_
é explicitamente omitido . Seu comentário incorreto provocou uma pergunta .Em
bash
,.
esource
são sinônimos. Examinando obash
código-fonte, o arquivobuiltin/source.def
, você pode ver.
esource
usar a mesma função internasource_builtin
:Mas
source
não é compatível com POSIX, portanto, se seu script for chamado com POSIX/bin/sh
, você deve usar em.
vez desource
. Como o POSIX não restringe o shell, todo o script acima funcionará.Pessoalmente, eu sempre uso em
.
vez desource
. (Muitos scripts em que escrevi são executadoscron
).fonte
.
geralmente é "melhor" do que o usosource
, como diz o @abonet,source
é muito mais fácil procurar. Como os períodos são pontuados em vários idiomas, é fácil para os olhos pularem sobre eles. É por isso que eu prefiro usarsource
.