Co to jest #! / Bin / bash w skryptach powłoki? Jaka jest różnica między / bin / sh i / bin / bash? Dlaczego czasami skrypt powłoki działa bez linii?


Najlepsza odpowiedź

#!/bin/bash

Jest to znane jako shebang, mówi interpreterowi, że następujące wiersze są napisane dla basha, więc wykonaj ten plik jako skrypt basha.

#Example: Scripts are usually executed like below:

./scriptName

Tak więc shebang określa sposób interpretacji skryptu, czasami może wyglądać następująco:

#!/bin/sh

#!//usr/bin/perl

#!/usr/bin/python

#!/bin/bash

#!/bin/ksh

Zatem te wiersze określają, w jaki sposób skrypty powinny być interpretowane i wykonywane. teraz nadchodzi Dlaczego /bin/sh?

Wskazuje na jedną ze skonfigurowanych powłok, czasami sh wskazuje na bash, czasami inna powłoka, jak cshell, dash,zsh ,ksh itp.

Przykład:

#case-1:

ls -lrt /bin/sh

lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -> dash

#case-2

ls -lrt /bin/sh

lrwxrwxrwx 1 root root 4 Jul 12 2017 /bin/sh -> bash

Jeśli więc używasz #!/bin/sh w swoim skrypcie, zachowanie twojego skryptu będzie się różnić w zależności od powłoki sh wskazuje na twój system. Zwróć uwagę, że możesz nadpisać shebang, uruchamiając skrypt, na przykład:

bash scriptName

#or

sh scriptName

W dwóch powyższych przypadkach shebang nie wpłynie na wykonanie i zostanie zrobione do bash i sh (wskazana przez to powłoka).

Odpowiedź

Cóż,„ dokładnie ”jak one działają wiele poziomów szczegółowości, więc będziemy tutaj dość niedokładni. Wszystkie programy są wykonywane przez umieszczenie ich kodu w określonej, dedykowanej sekcji pamięci, a następnie wywołanie punktu wejścia tego obrazu kodu w pamięci. Następnie program po prostu się uruchamia.

Czynność umieszczenia obrazu kodu w pamięci jest wykonywana przez system operacyjny i jest tym, co nazywamy „uruchomieniem” lub wykonaniem programu. System operacyjny robi to z własnej inicjatywy tylko raz; w czasie rozruchu, gdy uruchamia proces init . Proces init i jego elementy podrzędne proszą system operacyjny o uruchomienie innych procesów, wywołując exec Wywołanie systemowe OS.

Powłoka jest jednocześnie wyjątkowa i zwyczajna. To po prostu kolejny program, który działa, jak każdy inny. Nie ma żadnych specjalnych supermocy ani specjalnych właściwości. Jego celem jest umożliwienie użytkownikowi dostępu do usług systemu operacyjnego, przede wszystkim w celu uruchamiania innych programów określonych przez użytkownika. Udostępnia metody dostępne dla użytkownika, które umożliwiają użytkownikowi dostęp do systemu plików i określenie, jak używane są niektóre standardowe strumienie transmisji danych ( stdin , stdout i stderr ).

Powłoki zapewniają język programowania, którego można użyć do robią rzeczy w sposób zautomatyzowany, podejmując decyzje i iterując, aby zwiększyć wydajność i pracować bez interakcji z użytkownikiem. Zapewniają i używają specjalnej składni i notacji, których użytkownik musi się nauczyć i używać do wywoływania języka programowania i przetwarzania wiersza poleceń. Przetwarzanie poleceń powłoki może pochodzić z interaktywnego terminala lub z plików tekstowych zawierających skrypty.

Programy uruchamiane przez powłokę nazywane są procesami potomnymi powłoki. Każdy proces może uruchomić inny proces, więc powłoka nie jest wyjątkowa w tym sensie. Powłoka jest zoptymalizowana pod kątem umożliwienia użytkownikowi określenia sposobu uruchamiania procesów potomnych. Możesz zobaczyć heirarchię wszystkich procesów na hoście Linux za pomocą polecenia

ps -e lf

Gdzieś na liście znajdziesz sam proces „ ps ” i pojawi się jako proces potomny procesu powłoki, którego użyłeś do jego uruchomienia.

Tam jest znacznie więcej szczegółów; zbyt wiele, by ująć je w odpowiedzi Quora.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *