Por que as linhas comentadas em um arquivo de configuração do linux às vezes funcionam? [duplicado]

6

Por uma linha comentada, quero dizer:

#!/usr/bin/perl -w

e os comentários no arquivo /boot/grub/menu.lst , conforme descrito em esta resposta no superusuário .

Já tem um comentário, ou seja, a linha começa com # , mas ainda está sendo interpretada. Por que isso acontece?

    
por user3390767 06.05.2014 / 09:21

2 respostas

19

Qualquer linha que começa com # é um comentário em vários idiomas e é ignorada pelo intérprete ( perl etc.).

No entanto, se a primeira linha de um script no Linux começar com #! ( shebang como é chamado), não é um comentário, mas uma diretiva para o carregador de programas para realmente executar o programa especificado após #! e passar o nome do seu arquivo como o último argumento.

Por exemplo, se a primeira linha for

#!/usr/bin/perl -w

significa que o shell realmente invocará /usr/bin/perl -w /path/to/the/script e você não precisa especificar um programa para executar este script, você pode executá-lo usando

/path/to/the/script

se você tiver permissão para executá-lo e ele estiver localizado em um sistema de arquivos suportado para execução e o arquivo tiver permissão para ser executado.

Para o intérprete, no entanto, esta linha é sempre apenas um comentário, portanto, se o script for executado como:

perl /path/to/the/script

a linha não tem efeito. (Obrigado ao Ruslan por apontar isto).

Esteja avisado que # nem sempre é indicativo de um comentário. Por exemplo, uma instrução que comece com # em C é a diretiva de pré-processador e não um comentário.

No seu caso, a linha é um comentário e será ignorada durante a execução.

Atualização:

O arquivo de que você está falando é um menu.lst para o qual um comentário é uma linha que começa com ## e não # . (Fonte)

    
por jobin 06.05.2014 / 09:42
2

A linha que começa com #! ainda é um comentário, pois não é executada como comandos normais.

Mas não só é um comentário válido, mas também é um hashbang , uma linha que pode ser usada para indicar o interpretador a ser usado para executar esses comandos se o script for chamado por conta própria.

Hashbangs começam com # para serem compatíveis com os interpretadores que não lêem hashbangs, caso em que serão simplesmente interpretados como comentários e ignorados.

    
por thomasrutter 06.05.2014 / 16:24

Tags