Почему иногда работают закомментированные строки в файле конфигурации Linux? [дубликат]

На этот вопрос уже есть ответ здесь:

Под комментированной строкой я подразумеваю либо:

#!/usr/bin/perl -w

, либо комментарии в файле /boot/grub/menu.lst , как описано в этот ответ для суперпользователя .

Он уже содержит комментарий, т.е. строка начинается с # , но все еще интерпретируется. Почему это так?

6
задан 20 March 2017 в 03:18

2 ответа

Любая строка, которая начинается с 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 для которого комментарий является началом строки ## и нет #. (Источник)

19
ответ дан 23 November 2019 в 07:16

Строка, начинающаяся #!, является все еще комментарием, в котором она не выполняется как нормальные команды.

, Но мало того, что это - действительный комментарий, но и это также hashbang, строка, которая может использоваться для указания на интерпретатор, который будет использоваться для выполнения этих команд, если сценарий называют самостоятельно.

Hashbangs начинают #, чтобы быть обратно совместимыми с интерпретаторами, которые не читают hashbangs, в этом случае они будут просто интерпретироваться как комментарии и игнорироваться.

2
ответ дан 23 November 2019 в 07:16

Другие вопросы по тегам:

Похожие вопросы: