Przeglądałem kilka samouczków dotyczących skryptów powłoki i znalazłem następujący przykładowy program:
#!/bin/sh
clear
echo "HELLO WORLD"
Czy ktoś może mi powiedzieć, jakie znaczenie ma komentarz #!/bin/sh
na początku?
Przeglądałem kilka samouczków dotyczących skryptów powłoki i znalazłem następujący przykładowy program:
#!/bin/sh
clear
echo "HELLO WORLD"
Czy ktoś może mi powiedzieć, jakie znaczenie ma komentarz #!/bin/sh
na początku?
Odpowiedzi:
Nazywa się on shebang i informuje powłokę nadrzędną, którego interpretera należy użyć do wykonania skryptu.
na przykład
#!/usr/bin/perl <--perl script'
#!/usr/bin/php <-- php script
#!/bin/false <--- do-nothing script, because false returns immediately anyways.
Jest zaimplementowany jako komentarz, więc nic, co pojawia się w tej linii, nie będzie „istotne” dla określonego interpretera. np. wszystkie języki skryptowe mają tendencję do rozumienia, że wiersz zaczynający się od #
jest komentarzem, i zignorują !/usr/bin/whatever
fragment, który w przeciwnym razie mógłby być błędem składniowym w tym konkretnym języku.
exec()
wywołanie systemowe pliku.
Kiedy spróbujesz uruchomić program w systemie UNIX (taki z ustawionym bitem wykonywalnym), system operacyjny sprawdzi kilka pierwszych bajtów pliku. Tworzą one tak zwaną „magiczną liczbę”, za pomocą której można zdecydować o formacie programu i sposobie jego wykonania.
#!
odpowiada magicznej liczbie 0x2321 (sprawdź ją w tabeli ascii). Gdy system widzi tę magiczną liczbę, wie, że ma do czynienia ze skryptem tekstowym i czyta do następnego \n
(jest limit, ale ucieka mi w atm). Po zidentyfikowaniu tłumacza (pierwszy argument po shebangu) wezwie tłumacza.
Inne pliki również mają magiczne liczby. Spróbuj spojrzeć na plik mapy bitowej (.BMP) za pośrednictwem, less
a zobaczysz, że pierwsze dwa znaki to BM
. Ta magiczna liczba oznacza, że plik jest rzeczywiście bitmapą.
Jeśli plik, w którym znajduje się ten skrypt, jest wykonywalny, funkcja hash-bang ( #!
) informuje system operacyjny, jakiego interpretera należy użyć do uruchomienia skryptu. W tym przypadku jest to /bin/sh
na przykład.
Jest artykuł w Wikipedii o tym, aby uzyskać więcej informacji.
Pierwsza linia mówi powłoce, że jeśli wykonujesz skrypt bezpośrednio (./run.sh; w przeciwieństwie do / bin / sh run.sh), powinna użyć tego programu (w tym przypadku / bin / sh) do jego zinterpretowania.
Możesz również użyć go do przekazania argumentów, zwykle -e (wyjście w przypadku błędu) lub użyć innych programów (/ bin / awk, / usr / bin / perl itp.).
#!/bin/sh
lub #!/bin/bash
musi być pierwszym wierszem skryptu, ponieważ jeśli nie użyjesz go w pierwszym wierszu, system potraktuje wszystkie polecenia w tym skrypcie jako różne polecenia. Jeśli pierwsza linia to, #!/bin/sh
to potraktuje wszystkie polecenia jako jeden skrypt i pokaże, że ten plik jest uruchomiony w ps
poleceniu, a nie polecenia wewnątrz pliku.
./echo.sh
ps -ef |grep echo
trainee 3036 2717 0 16:24 pts/0 00:00:00 /bin/sh ./echo.sh
root 3042 2912 0 16:24 pts/1 00:00:00 grep --color=auto echo
ps
i fragmenty kodu, takie jak, #!/bin/sh
powinny być sformatowane.