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.