Proszę mi powiedzieć, jaka jest różnica w powłoce Basha między uruchomieniem skryptu a ./script.sh
i . ./script.sh
?Różnica między uruchomieniem skryptu a ./script.sh i. ./script.sh
Odpowiedz
Jak mówi Klausbyskov, pierwsza forma wymaga, aby plik miał ustawiony bit uprawnień do wykonywania.
Co ważniejsze, pierwsza forma wykonuje skrypt w oddzielnym procesie (innym niż, niezależnym od i nie mogącym dokonać zmian w powłoce, która go uruchomiła). Druga forma powoduje, że początkowa powłoka bezpośrednio uruchamia polecenia z pliku (tak jakbyś wpisywał je w powłoce lub tak, jakby były zawarte w skrypcie, który robi "pozyskiwanie").
Skrypt zawierający FOO=bar; export FOO
nie utworzy wyeksportowanej zmiennej środowiskowej FOO
w powłoce, która uruchamia pierwszy wariant, ale utworzy taką zmienną w powłoce, która uruchomi drugi wariant.
Druga forma („pozyskiwanie”) jest trochę jak #include
w C.
Pierwsza wymaga, aby plik miał ustawioną flagę + x. Drugi używa. command aka "source", opisany here.
- 1. Różnica między uruchomieniem a uruchomieniem wątku
- 2. Różnica między uruchomieniem wątku a włączeniem wątku?
- 3. kłopoty z uruchomieniem skryptu bash zdalnie, przekierowanie wyjścia lokalnie
- 4. Jak uruchomić ./script.sh w powłoce systemu Windows Git?
- 5. Jaka jest różnica między $ @ i $ * w skrypcie powłoki?
- 6. Różnica między uruchomieniem programu zi bez mpirun
- 7. Różnica między String [] a i String ... a
- 8. Różnica między ksh i bash skryptu
- 9. Różnica między jquery a $
- 10. Różnica między || a = b i a = a || b w rubin?
- 11. Różnica między obiektem a *?
- 12. Różnica między File.Copy a File.Move
- 13. Hyperledger: get "/ bin/bash: ./scripts/script.sh: Brak takiego pliku lub katalogu" przy uruchomieniu "./byfn -m up"
- 14. Różnica między +++++ B i A ++ + ++ b
- 15. Różnica między „a” i „gdzie” w dołącza
- 16. Importowanie funkcji ze skryptu powłoki
- 17. Różnica między wykonaniem groovy skryptu a wykonaniem skryptu grovy systemu w jenkins?
- 18. Różnica między definiowaniem zmiennej jako var $ a = $() i var a?
- 19. Jaka jest różnica między „$ a” i $ a w Uniksie
- 20. Różnica między kompasem a sass?
- 21. Różnica między clojure a clojurescript?
- 22. Różnica między kodowaniem a sortowaniem?
- 23. Różnica między autoconf a autoreconf
- 24. Różnica między systemem a shell_exec
- 25. Różnica między SimpleStringProperty a StringProperty
- 26. Różnica między paszportem a JWT?
- 27. Różnica między akcją a action.async
- 28. Różnica między LIST_HEAD_INIT a INIT_LIST_HEAD
- 29. Różnica między content_main.xml a activity_main.xml?
- 30. Różnica między ActivityUnitTestCase a ActivityInstrumentationTestCase2
Chociaż to prawda, tym bardziej istotna różnica jest taka, że „źródło” czyta i wykonuje plik w bieżącej instancji powłoki. Wykonywanie skryptu uruchamia nową instancję powłoki (zgodnie z linią shebang), w której skrypt jest wykonywany. –
@Dan, tak to prawda, i jest również wyjaśnione w linku, który napisałem. –
To jest flaga '-x' * uprawnienie *, a nie opcja bash -x * *, aby było jasne. –