Innym sposobem jest wywołanie interpretera i przekazanie mu ścieżki do skryptu:
/bin/sh /path/to/script
Kropka i źródło są równoważne. (EDYCJA: nie, nie są: jak KeithB wskazuje w komentarzu do innej odpowiedzi: „.” Działa tylko w powłokach związanych z bash, gdzie „źródło” działa zarówno w powłokach związanych z bash, jak i csh.) Wykonuje skrypt w -place (tak jakbyś skopiował i wkleił skrypt tutaj). Oznacza to, że pozostaną wszystkie funkcje i zmienne nielokalne w skrypcie. Oznacza to również, że jeśli skrypt włoży płytę CD do katalogu, to po zakończeniu będziesz tam nadal.
Inne sposoby uruchamiania skryptu powodują uruchomienie go we własnej podpowłoce. Zmienne w skrypcie nie są jeszcze aktywne, gdy jest gotowe. Jeśli skrypt zmieni katalogi, nie wpłynie to na środowisko wywołujące.
Skrypty / path / to / script i / bin / sh różnią się nieco. Zazwyczaj skrypt ma „shebang” na początku, który wygląda następująco:
#! /bin/bash
To jest ścieżka do interpretera skryptów. Jeśli określa innego interpretera niż ty, kiedy go wykonujesz, może on zachowywać się inaczej (lub w ogóle nie działać).
Na przykład skrypty Perla i Ruby zaczynają się (odpowiednio):
#! /bin/perl
i
#! /bin/ruby
Jeśli wykonasz jeden z tych skryptów przez uruchomienie /bin/sh script
, to w ogóle nie będą działać.
Ubuntu w rzeczywistości nie używa powłoki bash, ale bardzo podobną o nazwie dash. Skrypty wymagające bash mogą działać nieco niepoprawnie po wywołaniu, /bin/sh script
ponieważ właśnie wywołałeś skrypt bash za pomocą interpretera myślników.
Inną niewielką różnicą między bezpośrednim wywołaniem skryptu a przekazaniem ścieżki skryptu do interpretera jest to, że skrypt musi być oznaczony jako wykonywalny, aby uruchomić go bezpośrednio, ale nie należy go uruchamiać, przekazując ścieżkę do interpretera.
Kolejna drobna odmiana: możesz poprzedzić dowolny z tych sposobów wykonania skryptu eval, więc możesz to zrobić
eval sh script
eval script
eval . script
i tak dalej. W rzeczywistości nic to nie zmienia, ale pomyślałem, że dodam to dla dokładności.