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?

binW
fonte

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.

kiamlaluno
fonte
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.

jjg
fonte
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