2009-12-10 12 views

Odpowiedz

17

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.

4

Pierwsza wymaga, aby plik miał ustawioną flagę + x. Drugi używa. command aka "source", opisany here.

+3

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. –

+0

@Dan, tak to prawda, i jest również wyjaśnione w linku, który napisałem. –

+2

To jest flaga '-x' * uprawnienie *, a nie opcja bash -x * *, aby było jasne. –

Powiązane problemy