Zastanawiałem się, czy następujące dwa sposoby uruchamiania skryptu bash są równoważne?
. ./myScript.sh source myScript.sh
- Czy obaj uruchamiają treść skryptu zamiast skryptu, tzn. Nie tworzą podpowłoki do uruchomienia skryptu?
bash
shell
shell-script
Tim
źródło
źródło
man .
,man source
Czy cokolwiek jeszcze nie wiem.type .
ihelp .
man $SHELL
,/source
Odpowiedzi:
Są równoważni w bash, ponieważ robią dokładnie to samo. Z drugiej strony
source
jest 5 znaków dłuższych i nie można go przenosić na powłoki tylko POSIX lub Bourne, podczas gdy.
(kropka) jest, więc nigdy nie zawracam sobie głowy używaniemsource
.To prawda - podczas pobierania pliku uruchamiane są polecenia w bieżącej powłoce i wpływa to na bieżące środowisko powłoki. Nadal możesz przekazywać argumenty do pliku źródłowego, a bash faktycznie szuka
$PATH
nazwy pliku, tak jak normalne polecenie, jeśli nie zawiera żadnych ukośników.Nie związane z pierwotnym pytaniem
.
vssource
, ale w twoim przykładzienie jest identyczny z
ponieważ podczas
.
isource
są funkcjonalnie identycznemyScript.sh
i./myScript.sh
nie są takie same. Ponieważ./myScript.sh
zawiera ukośnik, jest interpretowany jako ścieżka, a powłoka po prostu używa./myScript.sh
. JednakmyScript.sh
nie ma ukośnika, więc powłoka$PATH
najpierw go szuka. Jest to standardowe zachowanie określone przez POSIX.
. Większość powłok domyślnie tego używa, chociaż mogą dodawać rozszerzenia (takie jak wyszukiwanie w bieżącym katalogu roboczym po wyszukiwaniu ścieżki) lub opcje zmiany zachowania.
/source
.źródło
/
powłokibash
izsh
zależy od tego, czy tryb POSIX jest włączony, czy nie. Zauważ też, że w wielu implementacjach ksh.
zachowuje się inaczej niżsource
.Tak, są równoważne. Nie ma żadnej różnicy funkcjonalnej;
.
jest tylko wbudowanym synonimemsource
.(Edycja: Najwyraźniej jest to prawdą tylko dla
bash
izsh
Niektóre lżejsze pociski nie mają.source
, Tylko.
jest określony przez POSIX takksh
,dash
,ash
, itd. Nie mogą miećsource
See. Odpowiedź jw013 koszulka dla informacji).źródło
$ alias .
wynikibash: alias: .: not found
.