На этот вопрос уже есть ответ здесь:
Под комментированной строкой я подразумеваю либо:
#!/usr/bin/perl -w
, либо комментарии в файле /boot/grub/menu.lst
, как описано в этот ответ для суперпользователя .
Он уже содержит комментарий, т.е. строка начинается с #
, но все еще интерпретируется. Почему это так?
Любая строка, которая начинается с a #
комментарий на многих языках и проигнорирован интерпретатором (perl
и т.д.).
Однако, если первая строка сценария в Linux начинается с a #!
(хижина, как это называют), это не комментарий, а директива к загрузчику программы для фактического запущения программы, указанной после #!
и передайте его название Вашего файла как последний аргумент.
Например, если первая строка
#!/usr/bin/perl -w
это означает, что оболочка на самом деле вызовет /usr/bin/perl -w /path/to/the/script
и Вы не должны указывать программу для запущения этого скрипта, можно выполнить его использование
/path/to/the/script
если у Вас есть разрешение выполнить его, и это расположено в файловой системе, поддерживаемой для выполнения, и файл имеет разрешение, которое будет выполняться.
Для интерпретатора, однако, эта строка является всегда просто комментарием, поэтому если сценарий выполняется как:
perl /path/to/the/script
затем строка не имеет никакого эффекта. (Благодаря Ruslan для указания на это).
Предупредите это #
не всегда показательно из комментария. Например, оператор, начинающийся a #
в C директива препроцессору и не комментарий.
В Вашем случае строка является комментарием и будет проигнорирована в то время как выполнение.
Обновление:
Файл, о котором Вы говорите, является a menu.lst
для которого комментарий является началом строки ##
и нет #
. (Источник)
Строка, начинающаяся #!
, является все еще комментарием, в котором она не выполняется как нормальные команды.
, Но мало того, что это - действительный комментарий, но и это также hashbang, строка, которая может использоваться для указания на интерпретатор, который будет использоваться для выполнения этих команд, если сценарий называют самостоятельно.
Hashbangs начинают #
, чтобы быть обратно совместимыми с интерпретаторами, которые не читают hashbangs, в этом случае они будут просто интерпретироваться как комментарии и игнорироваться.