Qual é a diferença entre "source" e "."?


147

Qual é a diferença entre executar um script (por exemplo / some / script) com source /some/scripte . /some/scriptno Bash?

Respostas:


134

sourcee .são sinônimos no Bash .

Para quem quiser verificar se os comandos são simplesmente sinônimos e nada mais, consulte o código-fonte , digamos a versão 4.3, e examine o arquivo builtins/source.def. Você vai ler que ambos os comandos internos, sourcee ., use a mesma função: source_builtin.


onde isso é definido? Eu quero dizer é. um alias para a fonte ou isso é outra coisa?
9287 binW


12
@binW: .é o comando de origem tradicional, herdado do antigo shell bourne. sourceé apenas um bash embutido que faz exatamente o mesmo que ., presumivelmente porque é mais legível ( .pode ser difícil identificar um sozinho com uma fonte pequena). Você verá help sourcee help .mostra as mesmas informações.
geirha

3
@binW: se você procurar man bashe procurar, sourceverá que isso source filename [arguments]é sinônimo . filename [arguments].
Matthew Rankin

46

.é sinônimo de sourceno bash, mas não no POSIX sh, portanto, você deve usar .se o script for executado por / bin / sh. Observe que o bash afirma ser executado como POSIX sh quando chamado como / bin / sh, mas aceita sourcesem reclamação.

Esse comportamento me incomodou, scripts testados com bash como / bin / sh falham quando executados no ash, por exemplo.


16
O POSIX não restringe o shell. O POSIX apenas diz; a concha deve suportar pelo menos este e aquele elemento. Portanto, um shell POSIX é livre para implementar recursos adicionais, desde que os descritos pelo POSIX sejam implementados. Quando o shebang diz que #!/bin/shvocê nunca deve assumir que o shell suporta nada além de recursos POSIX. pubs.opengroup.org/onlinepubs/9699919799/utilities/…
geirha

Você pode ser afetado pela ordem em que os nomes são visualizados: unix.stackexchange.com/q/17815/8250
Lekensteyn

3
Essa resposta me ajudou, já que sh é frequentemente usado no cron.
dfrankow
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.