Eu notei isso em algumas linguagens de script, mas neste exemplo, estou usando python. Em muitos tutoriais, eles começariam #!/usr/bin/python3
na primeira linha. Não entendo por que temos isso.
- O sistema operacional não deveria saber que é um script python (obviamente está instalado desde que você está fazendo uma referência a ele)
- E se o usuário estiver usando um sistema operacional que não seja baseado em unix
- O idioma é instalado em uma pasta diferente por qualquer motivo
- O usuário tem uma versão diferente. Especialmente quando não é um número de versão completo (como Python3 x Python32)
Se alguma coisa, eu pude ver isso quebrando o script python por causa dos motivos listados acima.
Respostas:
#!/usr/bin/python3
é uma linha shebang .Uma linha shebang define onde o intérprete está localizado. Nesse caso, o
python3
intérprete está localizado em/usr/bin/python3
. A coisa toda linha também poderia ser umabash
,ruby
,perl
intérprete ou quaisquer outras linguagens de script, por exemplo:#!/bin/bash
.Sem a linha shebang, o sistema operacional não sabe que é um script python, mesmo se você definir o sinalizador de execução no script e executá-lo como ele
./script.py
. Para executar o script por padrão em python3, chame-o comopython3 script.py
ou defina a linha shebang.Você pode usar
#!/usr/bin/env python3
para portabilidade em diferentes sistemas, caso eles tenham o intérprete de idioma instalado em locais diferentes.fonte
#! /usr/bin/env python3
deve ser escolhido#! /usr/bin/python3
?Isso é chamado de hash-bang. Se você executar o script a partir do shell, ele inspecionará a primeira linha para descobrir qual programa deve ser iniciado para interpretar o script.
Um sistema operacional não baseado em Unix utilizará suas próprias regras para descobrir como executar o script. O Windows, por exemplo, usará a extensão do nome do arquivo e
#
fará com que a primeira linha seja tratada como um comentário.Se o caminho para o executável do Python estiver errado, naturalmente o script falhará. É fácil criar links para o executável real a partir de qualquer local especificado por convenção padrão.
fonte
Essa linha ajuda a encontrar o programa executável que executará o script. Essa notação shebang é bastante padrão na maioria das linguagens de script (pelo menos conforme usada em sistemas operacionais crescidos).
Um aspecto importante desta linha é especificar qual intérprete será usado. Em muitas distribuições Linux centradas no desenvolvimento, por exemplo, é normal ter várias versões do python instaladas ao mesmo tempo.
Python 2.xe Python 3 não são 100% compatíveis, portanto, essa diferença pode ser muito importante. Portanto,
#! /usr/bin/python
e#! /usr/bin/python3
não são os mesmos (e nem são os mesmos#! /usr/bin/env python3
que os observados em outras partes desta página).fonte
E essa linha é como .
Isso é ignorado.
Ele falhará na execução e deve ser alterado para apontar para o local apropriado. Ou
env
deve ser usado.Ele falhará na execução e provavelmente falhará em uma versão diferente, independentemente.
fonte
Para esclarecer como a linha shebang funciona para janelas, no documento 3.7 Python :
fonte
Na verdade, a determinação de que tipo de arquivo é muito complicado, agora o sistema operacional não pode saber. Pode fazer muitas suposições com base em -
Mas a linha de comando não se preocupa com tudo isso, porque é executada em uma camada compatível com versões anteriores limitada, a partir de quando esse absurdo sofisticado não significava nada. Se você clicar duas vezes com certeza, um sistema operacional moderno pode descobrir isso - mas se você o executar a partir de um terminal, então não, porque o terminal não se preocupa com o seu arquivo específico do SO sofisticado, digitando APIs.
Em relação aos outros pontos. É uma conveniência, é igualmente possível executar
python3 path/to/your/script
Se o seu python não estiver no caminho especificado, ele não funcionará, mas tendemos a instalar coisas para fazer coisas como esse funcionarem, e não o contrário. Na verdade, não importa se você está abaixo do * nix, cabe ao seu shell considerar essa linha porque é uma
shellcode
. Então, por exemplo, você pode executarbash
no Windows.Você pode realmente omitir essa linha completamente, apenas significa que o chamador terá que especificar um intérprete. Além disso, não coloque seus intérpretes em locais fora do padrão e tente chamar scripts sem fornecer um intérprete.
fonte