Absolutnie nie głupie pytanie! Sprawdź to (najpierw), potem to i to .
Emanuel Berg,
Odpowiedzi:
7
Twój terminal uruchamia powłokę (najprawdopodobniej bash), która prosi o twoje polecenia i je uruchamia.
Oprócz tego trybu interaktywnego możesz także używać powłoki do uruchamiania poleceń z pliku. Aby wykonać polecenia z pliku, możesz albo wywołać powłokę bezpośrednio jak bash scriptlub możesz uruchomić plik z „shebang” #!/bin/bashi ustawić go jako wykonywalny ( chmod +x script). Następnie możesz traktować skrypt jak plik binarny i wykonać go na przykład jako ./scriptlub umieścić w miejscu, w którym szuka go powłoka. ( echo $PATH)
Najprawdopodobniej jest to zarówno twoja interaktywna powłoka, jak i powłoka użyta do uruchomienia bash. Z perspektywy „pierwszego dnia nauki linux” bash działa dokładnie tak samo w obu trybach. - Dużo później możesz się natknąć na niewielkie różnice. Jeśli naprawdę chcesz wiedzieć o szczegółach, sugerowałbym przeczytanie man bashi poszukiwanie miejsc wspominających o „interaktywnym”. (Możesz przeszukać stronę podręcznika, naciskając /.)
Należy zauważyć, że skrypt jest uruchamiany jako nowy proces. Oznacza to w szczególności, że zmienne ustawione w skrypcie nie są widoczne w powłoce wywołującej.
$ export a=1
$ echo $a
1
$ bash -c 'echo $a;a=2;echo $a' # change the value in a script
1
2
$ echo $a # value not changed here
1
$
Bez eksportu anie jest nawet widoczny dla wewnętrznego skryptu.
Ogólnie odpowiedź brzmiałaby „nie”, polecenia w powłoce są takie same w skryptach, w składni i semantyce.
Istnieje jednak kilka drobnych niuansów związanych z konfiguracją środowiska (jakie zmienne są używane i jakie są ustawione).
interaktywna powłoka z wyboru dla Linuksa bash, ale skryptowym często używa innych tłumaczy ( sh, który jest poprzednikiem bash, ksh, który jest na równi z bash), więc trzeba wziąć pod uwagę to, co powłoka jest używany (nazwa bieżącej powłoki s tradycyjnie odbywa się w zmiennej SHELL, spróbuj pisać echo $SHELL).
mogą występować różnice w konfiguracji tego samego interpretera dla sesji interaktywnej i wykonywania skryptu.
Nie. Wklejanie zawartości jest równoznaczne z pozyskiwaniem skryptu. Spowoduje to zmianę wszelkiego rodzaju opcji w bieżącej powłoce, których nie zmieniłoby po prostu uruchomienie skryptu.
michas,
masz rację. ale jeśli chodzi o jego pytania. Myślę, że możemy powiedzieć, że jest dość podobny. ale tak, aby przetłumaczyć to, co powiedział michas w kategoriach noob'er. wklejenie zawartości skryptu jest równoważne source script_file. które będą edytować zmienne ENV w bieżącym kontekście. podczas uruchamiania skryptu, ponieważ ./script_filenie zmodyfikuje ENV, chyba że exportzostanie użyty jawnie.
Mathieu J.,
1
Nie. Nawet przy exporttym skrypt nie może modyfikować żadnych zmiennych powłoki wywołującej. To samo dotyczy rzeczy takich jak PWD, zdefiniowane aliasy, funkcje i tego typu rzeczy. Można je zmienić tylko interaktywnie lub poprzez pobranie pliku. Ale tak, to chyba nic, z kim ktoś się potknie pierwszego dnia. :)
michas
1
@michas: Cóż, nadal lepiej jest podać poprawny opis. Jeśli początkujący jest ambitny i ma nawyki pracy, szybko odbierze. Jeśli spróbujemy opowiedzieć dziecku bajkę, potkniemy się na nogach i zrobimy niezrozumiałe wrażenie - poza tym początkujący może wrócić. Chociaż nie uważam się za początkującego, jest wiele rzeczy, których nie wiem i byłbym obrażony, gdyby ktokolwiek powstrzymał się od odpowiedzi na moje pytania, ponieważ „jeszcze cię nie ma, młodszy”.
Odpowiedzi:
Twój terminal uruchamia powłokę (najprawdopodobniej
bash
), która prosi o twoje polecenia i je uruchamia.Oprócz tego trybu interaktywnego możesz także używać powłoki do uruchamiania poleceń z pliku. Aby wykonać polecenia z pliku, możesz albo wywołać powłokę bezpośrednio jak
bash script
lub możesz uruchomić plik z „shebang”#!/bin/bash
i ustawić go jako wykonywalny (chmod +x script
). Następnie możesz traktować skrypt jak plik binarny i wykonać go na przykład jako./script
lub umieścić w miejscu, w którym szuka go powłoka. (echo $PATH
)Najprawdopodobniej jest to zarówno twoja interaktywna powłoka, jak i powłoka użyta do uruchomienia
bash
. Z perspektywy „pierwszego dnia nauki linux” bash działa dokładnie tak samo w obu trybach. - Dużo później możesz się natknąć na niewielkie różnice. Jeśli naprawdę chcesz wiedzieć o szczegółach, sugerowałbym przeczytanieman bash
i poszukiwanie miejsc wspominających o „interaktywnym”. (Możesz przeszukać stronę podręcznika, naciskając/
.)Należy zauważyć, że skrypt jest uruchamiany jako nowy proces. Oznacza to w szczególności, że zmienne ustawione w skrypcie nie są widoczne w powłoce wywołującej.
Bez eksportu
a
nie jest nawet widoczny dla wewnętrznego skryptu.źródło
Ogólnie odpowiedź brzmiałaby „nie”, polecenia w powłoce są takie same w skryptach, w składni i semantyce.
Istnieje jednak kilka drobnych niuansów związanych z konfiguracją środowiska (jakie zmienne są używane i jakie są ustawione).
interaktywna powłoka z wyboru dla Linuksa bash, ale skryptowym często używa innych tłumaczy (
sh
, który jest poprzednikiembash
,ksh
, który jest na równi z bash), więc trzeba wziąć pod uwagę to, co powłoka jest używany (nazwa bieżącej powłoki s tradycyjnie odbywa się w zmiennejSHELL
, spróbuj pisaćecho $SHELL
).mogą występować różnice w konfiguracji tego samego interpretera dla sesji interaktywnej i wykonywania skryptu.
źródło
Nie. Skrypt to lista poleceń, które można wpisać w terminalu.
Możesz wkleić całość skryptu w terminalu, a wynik będzie taki sam, jak uruchomienie go.
Odwrotnie, możesz „zapisać” polecenia terminala w pliku i przekształcić go w skrypt wielokrotnego użytku i udostępnić go rodzinie i znajomym.
źródło
source script_file
. które będą edytować zmienne ENV w bieżącym kontekście. podczas uruchamiania skryptu, ponieważ./script_file
nie zmodyfikuje ENV, chyba żeexport
zostanie użyty jawnie.export
tym skrypt nie może modyfikować żadnych zmiennych powłoki wywołującej. To samo dotyczy rzeczy takich jak PWD, zdefiniowane aliasy, funkcje i tego typu rzeczy. Można je zmienić tylko interaktywnie lub poprzez pobranie pliku. Ale tak, to chyba nic, z kim ktoś się potknie pierwszego dnia. :)