Jaka jest różnica między „źródłem” a „.”?

147

Jaka jest różnica między wykonywaniem skryptu (np. / Some / script) za pomocą source /some/scriptiw . /some/scriptBash?

binW
źródło

Odpowiedzi:

134

sourcei .są synonimami w Bash .

Dla każdego, kto chciałby sprawdzić, czy polecenia są po prostu synonimami i niczym więcej, spójrz na kod źródłowy , powiedzmy na wersję 4.3, i sprawdź plik builtins/source.def. Można przeczytać, że zarówno z wbudowanych poleceń sourcei .użyć tę samą funkcję: source_builtin.

kiamlaluno
źródło
gdzie to jest zdefiniowane? Mam na myśli to. alias dla źródła czy to coś innego?
binW
dokładnie to samo
12
@binW: .to tradycyjne polecenie źródłowe, odziedziczone po starożytnej powłoce Bourne'a. sourcejest tylko wbudowanym bash'em, który robi dokładnie to samo co ., prawdopodobnie dlatego, że jest bardziej czytelny ( .sam może być trudny do zauważenia za pomocą małej czcionki). Zobaczysz help sourcei help .pokaże te same informacje.
geirha
3
@binW: Jeśli zajrzysz do, man basha następnie poszukasz, sourcezobaczysz, że source filename [arguments]jest to synonim . filename [arguments].
Matthew Rankin
45

.jest synonimem sourcew bash, ale nie w POSIX sh, więc powinieneś użyć, .jeśli twój skrypt jest uruchamiany przez / bin / sh. Zauważ, że bash twierdzi, że działa jak POSIX sh, gdy jest wywoływany jako / bin / sh, ale akceptuje sourcebez reklamacji.

To zachowanie mnie ugryzło, skrypty przetestowane przy użyciu bash, ponieważ / bin / sh zawodzą, na przykład, gdy działają pod popiołem.

jjg
źródło
16
POSIX nie ogranicza powłoki. POSIX po prostu mówi; powłoka obsługuje co najmniej tę i tę cechę. Tak więc powłoka POSIX może swobodnie implementować dodatkowe funkcje, o ile implementowane są te opisane przez POSIX. Kiedy shebang mówi, #!/bin/shże nigdy nie powinieneś zakładać, że powłoka obsługuje nic poza funkcjami POSIX. pubs.opengroup.org/onlinepubs/9699919799/utilities/...
geirha
Kolejność wyszukiwania nazw może dotyczyć Ciebie
Lekensteyn
2
Ta odpowiedź pomogła mi, ponieważ sh jest często używany w cronie.
dfrankow