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.
Zwykle to jądro, a nie powłoka, przetwarza to. Powłoka po prostu wywołuje exec()wywołanie systemowe pliku.
tripleee
47
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.
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.
Stack Overflow to nie Twitter. Poświęć trochę czasu na przeliterowanie słów, takich jak „u” i „1st”. Pomagasz w pisaniu podręcznika, aby poprawna gramatyka i pisownia były ważne. Zwróć też uwagę na prawidłowe formatowanie. Polecenia, które byłyby wydawane z wiersza poleceń, podobnie jak psi fragmenty kodu, takie jak, #!/bin/shpowinny być sformatowane.
The Tin Man,
Próbowałem tutaj uporządkować angielski, ale nadal nie jestem pewien, co to znaczy. Wydaje mi się, że odpowiedź próbuje powiedzieć, że polecenia w skrypcie będą wykonywane jako odrębne polecenia, a dodanie shebang pokaże skrypt jako pojedyncze polecenie na liście procesów. To nieprawda.
Odpowiedzi:
Nazywa się on shebang i informuje powłokę nadrzędną, którego interpretera należy użyć do wykonania skryptu.
na przykład
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.źródło
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 toBM
. Ta magiczna liczba oznacza, że plik jest rzeczywiście bitmapą.źródło
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.
źródło
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.).
źródło
#!/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 wps
poleceniu, a nie polecenia wewnątrz pliku.źródło
ps
i fragmenty kodu, takie jak,#!/bin/sh
powinny być sformatowane.