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?

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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.