O que é essa linha no topo de muitos arquivos?

3

Eu vi muitos arquivos que têm essa linha como a primeira linha neles. O que exatamente é isso?

#!/usr/bin/env python

O que isso significa? Por que é necessário?

    
por hellodear 05.05.2014 / 10:15

3 respostas

5

Não é apenas /usr/bin/env python , mas #!/usr/bin/env python , e essa linha é chamada de shebang .

Estou citando a Wikipédia:

  

Em sistemas operacionais semelhantes ao Unix, quando um script com um shebang é executado   como um programa, o carregador de programas analisa o restante do script   linha inicial como diretiva de intérprete; o intérprete especificado   programa é executado em vez disso, passando para ele como um argumento o caminho que foi   inicialmente usado ao tentar executar o script. [8] Por exemplo, se um   script é nomeado com o caminho "caminho / para / script", e começa com o caminho   linha seguinte:

#!/bin/sh
     

o programa loader é instruído a executar o programa "/ bin / sh"   em vez disso (geralmente este é o shell Bourne ou um shell compatível),   passando "caminho / para / script" como o primeiro argumento.

     

A linha shebang é geralmente ignorada pelo intérprete porque o "#"   caractere é um marcador de comentário em muitas linguagens de script; alguns   intérpretes de idioma que não usam o hash mark para começar comentários   (como o Scheme) ainda pode ignorar a linha de shebang em reconhecimento de   seu propósito.

No meu caso (13.10 Desktop), /usr/bin/env python será o padrão para python2.7, mas poderá ser python3.4 dependendo dos padrões do seu sistema (por exemplo, 14.04 Server).

$ /usr/bin/env python
Python 2.7.5+ (default, Feb 27 2014, 19:37:08) 
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 
    
por Sylvain Pineau 05.05.2014 / 10:22
2

Uma linha como essa pode aparecer na primeira linha de programas ou scripts interpretados. É uma diretiva para o carregador de programas passar o arquivo para o interpretador - neste caso, o Python.

As diretivas de intérprete são colocadas na primeira linha de um script executável após os caracteres #! (chamado de shebang ou hashbang ) para que um script possa ser executado por apenas o nome do script, de uma das formas a seguir na linha de comando:

$ script
$ ./script
$ path/to/script

Para poder executar o script dessa maneira como um comando, ele deve ter permissão de execução.

em vez do interpretador com o nome do script como um argumento que seria necessário se a diretiva do intérprete não estivesse lá, assim:

$ python path/to/script
    
por jamtin 05.05.2014 / 10:45
2

#! é chamado de shebang. Normalmente, o Bash considera o símbolo # como um comentário, no entanto, ao ver #! Bash sabe que o restante do conteúdo deve ser um script e a primeira linha se referirá a qual programa ou intérprete invocar. No caso de #!/usr/bin/env python Bash sabe que esta linha está invocando as "configurações de ambiente" corretas para o interpretador Python. Assim, o restante do conteúdo do arquivo será executado usando o interpretador Python. Se a linha tivesse sido como #!/bin/bash ou #!/usr/bin/perl Bash teria executado o conteúdo usando Bash (propriamente dito) ou Perl, respectivamente.

Você ainda pode escrever um script em Python, Bash ou Perl sem mencionar essa linha. Nesse caso, para executar seu script Python, você precisaria invocar da linha de comando desta maneira:

/usr/bin/python MyScript.py

Isso ocorre porque sem o comando shebang #! e sem um caminho de intérprete correto, o Bash não saberia que é um script e o trataria como um arquivo de texto.

    
por Ish Sookun 06.05.2014 / 14:41