Я переглядав кілька навчальних посібників із сценарієм оболонки і знайшов таку зразок програми:
#!/bin/sh
clear
echo "HELLO WORLD"
Хто-небудь, будь ласка, скажіть мені, яке значення має коментар #!/bin/sh
на початку?
Я переглядав кілька навчальних посібників із сценарієм оболонки і знайшов таку зразок програми:
#!/bin/sh
clear
echo "HELLO WORLD"
Хто-небудь, будь ласка, скажіть мені, яке значення має коментар #!/bin/sh
на початку?
Відповіді:
Це називається шебанг і повідомляє батьківській оболонці, якого інтерпретатора слід використовувати для виконання сценарію.
напр
#!/usr/bin/perl <--perl script'
#!/usr/bin/php <-- php script
#!/bin/false <--- do-nothing script, because false returns immediately anyways.
Він реалізований як коментар, так що все, що потрапляє в цей рядок, не буде "стосуватися" вказаного перекладача. наприклад, всі мови сценаріїв, як правило, розуміють, що рядок, що починається з #
- це коментар, і ігнорують !/usr/bin/whatever
частину, що в іншому випадку може бути помилкою синтаксису в цій конкретній мові.
exec()
системний виклик у файлі.
Коли ви намагаєтеся виконати програму в unix (одну із встановленим виконуваним бітом), операційна система розгляне перші кілька байтів файлу. Вони утворюють так зване "магічне число", яке можна використовувати для визначення формату програми та способів її виконання.
#!
відповідає магічному номеру 0x2321 (шукайте його в таблиці ascii). Коли система бачить це магічне число, вона знає, що має справу з текстовим сценарієм і читає до наступного\n
(є обмеження, але воно уникає мені атм). Визначивши перекладача (перший аргумент після шебангу), він покличе перекладача.
Інші файли також мають магічні цифри. Спробуйте подивитися растровий файл (.BMP) через, less
і ви побачите, що перші два символи є BM
. Це магічне число позначає, що файл справді є растровим.
Перший рядок повідомляє оболонці, що якщо ви виконаєте скрипт безпосередньо (./run.sh; на відміну від / bin / sh run.sh), він повинен використовувати цю програму (/ bin / sh у цьому випадку) для його інтерпретації.
Ви також можете використовувати його для передачі аргументів, зазвичай -e (вихід із помилкою) або використання інших програм (/ bin / awk, / usr / bin / perl тощо).
#!/bin/sh
або #!/bin/bash
повинен бути першим рядком сценарію, тому що якщо ви не використовуєте його в першому рядку, система буде розглядати всі команди в цьому сценарії як різні команди. Якщо перший рядок, #!/bin/sh
то він буде розглядати всі команди як один сценарій, і він покаже, що цей файл працює в ps
команді, а не команди всередині файлу.
./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
, і витяги з коду , як , наприклад, #!/bin/sh
повинні бути відформатовані.