Я просматривал несколько руководств по сценариям оболочки и нашел следующий образец программы:
#!/bin/sh
clear
echo "HELLO WORLD"
Кто-нибудь, пожалуйста, скажите мне, каково значение комментария #!/bin/shв начале?
Я просматривал несколько руководств по сценариям оболочки и нашел следующий образец программы:
#!/bin/sh
clear
echo "HELLO WORLD"
Кто-нибудь, пожалуйста, скажите мне, каково значение комментария #!/bin/shв начале?
Ответы:
Он называется shebang и сообщает родительской оболочке, какой интерпретатор следует использовать для выполнения сценария.
например
#!/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(есть предел, но он ускользает от меня). Определив интерпретатор (первый аргумент после shebang), он вызовет интерпретатор.
Другие файлы также имеют магические числа. Попробуйте просмотреть файл растрового изображения (.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должны быть отформатированы.