Różnica między poleceniami w skrypcie bash a poleceniami w terminalu


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.


1

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.


-1

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.


4
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”.
Emanuel Berg,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.