2012-02-17 9 views
58

Widziałem skrypty powłoki, które zawierają linię takich jak:Co się dzieje, gdy plik jest `source` -d w kontekście Unix/Linux?

source someOtherFile 

wiem, że powoduje treść someOtherFile do wykonania, ale to, co jest znaczenie source?


Pytania uzupełniające: Czy można uzyskać WSZYSTKIE skrypty lub tylko niektóre typy skryptów? Czy są jakieś efekty uboczne inne niż zmienne środowiskowe, gdy pochodzi skrypt (w przeciwieństwie do normalnego wykonywania go)?

+2

duplikat witryny krzyżowej: http://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a-bash-scrip/176788#176788 – lesmana

Odpowiedz

67

Uruchomienie polecenia source w skrypcie powoduje wykonanie skryptu w kontekście bieżącego procesu. Oznacza to, że zmienne środowiskowe ustawione przez skrypt pozostają dostępne po zakończeniu ich działania. Jest to przeciwieństwo normalnego uruchamiania skryptu, w którym to przypadku zmienne środowiskowe ustawione w nowo utworzonym procesie zostaną utracone po zakończeniu skryptu.

Możesz pobrać dowolny działający skrypt powłoki. Efekt końcowy będzie taki sam jak w przypadku wpisania poleceń w skrypcie do terminala. Na przykład, jeśli skrypt zmieni katalogi, po zakończeniu działania Twój bieżący katalog roboczy zostanie zmieniony.

+2

Czy można uzyskać WSZYSTKIE skrypty lub tylko niektóre typy skryptów? Jakiekolwiek skutki uboczne, inne niż zmienne środowiskowe, gdy pochodzi skrypt (w przeciwieństwie do normalnego wykonywania go)? Twoja odpowiedź jest również zwięzła i zrozumiała. Dzięki! –

+4

Możesz pobrać dowolny skrypt powłoki. Efekty uboczne są tworzone przez fakt, że skrypt działa dosłownie w twoim procesie. Więc jeśli zmieni katalogi, zobaczysz zmianę pwd. Natomiast samo wykonanie skryptu powłoki zazwyczaj nie zmieni twojego pwd. – Interrobang

+0

Co mam napisać od dłuższego czasu w pliku źródłowym? czy to się skończy? lub jest tam domyślny limit czasu.? –

16

Jeśli powiesz powłoce, np. bash, aby odczytać plik i wykonać polecenia w pliku, nazywa się sourcing. Najważniejsze jest to, że obecny proces (shell) to robi, a nie nowy proces potomny.

W BASH można użyć polecenia source lub po prostu . do źródła pliku.

2

source to polecenie systemu Unix, które ocenia plik po komendzie, jako listę poleceń wykonanych w bieżącym kontekście. Możesz również użyć . do pozyskania pliku.

source my-script.sh; 
. my-script.sh; 

Oba polecenia będą miały taki sam efekt.

Natomiast przekazanie nazwy pliku skryptu do wybranej powłoki spowoduje uruchomienie skryptu w podpowłoce, a nie w bieżącym kontekście.

Powiązane problemy