Por que o “she-bang” começa com um “#!”?

10

Por que o "she-bang" começa com #! , como #!/bin/bash ? Eu sempre aceitei que isso é feito, mas há uma razão por trás disso?

Por que começar com # ; geralmente não é um comentário? Ou é o ponto que deveria ser comentário?

    
por Johan 13.07.2011 / 14:17

3 respostas

16

Normalmente shebang refere-se apenas ao #! ( ! é normalmente chamado de "bang" e parece que "ela" é uma corrupção de "SHArp" ou "haSH" para # ) - toda a linha é chamada de shebang line

Ele começa intencionalmente com um caractere de comentário para compatibilidade retroativa com coisas que não sabem como lidar com isso; o ! é, presumivelmente, apenas para distingui-lo de um comentário aleatório que inicia o arquivo, portanto, um arquivo que começa com # this is my script! não tenta executar o this is my script! intérprete

    
por 13.07.2011 / 15:41
3

Para entender isso, você deve perceber que a primeira linha do script é, na verdade, lida duas vezes , por dois programas diferentes. Na primeira vez, o kernel abre o arquivo e procura pela sequência de caracteres ( #! ) na primeira linha. Se o encontrar, ele executa o programa shell que é indicado lá, passando o nome do arquivo como um parâmetro. (por exemplo, se o arquivo /home/me/foo começar com #!/bin/sh , o kernel executará /bin/sh /home/me/foo ).

Em seguida, o shell ( bin/sh ou qualquer programa do interpretador especificado) lê o arquivo. O shell não sabe nada sobre linhas shebang, mas ainda lerá a primeira linha porque é como qualquer outra linha no arquivo ... lê todas elas. Você não quer que o shell falhe ou altere seu comportamento de forma alguma ... a maneira de fazer isso é fazer com que ele seja tratado como um comentário e ignorá-lo. Assim, o melhor caractere para uma instrução de kernel para começar seria o caractere de comentário.

    
por 05.11.2013 / 17:27
1

Ele precisa ser um comentário, porque só assim ele também funcionará para executar um script como "nome_do_Script nome_do_Script". Eu não sei sobre a origem do "!".

    
por 13.07.2011 / 14:55