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/shna 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/shna 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/whateverfragment, 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, lessa 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/shna 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/shlub #!/bin/bashmusi 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/shto potraktuje wszystkie polecenia jako jeden skrypt i pokaże, że ten plik jest uruchomiony w pspoleceniu, 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
psi fragmenty kodu, takie jak, #!/bin/shpowinny być sformatowane.