Qual é o propósito de usar #!/usr/bin/env <sh|bash|python>
shebang em comparação com #!/bin/bash
, #!/bin/sh
ou #!/usr/bin/python
?
command-line
bash
environment
Tuminoide
fonte
fonte
Respostas:
Algumas pessoas podem usar um python diferente (perl, etc.) que o sistema.
/usr/bin/env python
executaria a versão configurada como a atual, possivelmente tornando o script mais portátil.Por outro lado, alguns sistemas não possuem
/usr/bin/env
. Além disso, você não pode usar#!/usr/bin/env foo x
como um substituto para#!foo x
, porquefoo x
será interpretado como um único argumento. Portanto, o valor da abordagem é discutível.fonte
info coreutils 'env invocation'
que posso ver, essa forma de chamada garante que seja binário externo, em vez de embutido no shell, mas nenhuma indicação de comoenv python
seria diferentepython
?PATH
provavelmente inclui/usr/local/bin
primeiro. Se alguém instalou o python manualmente lá,env
o chamará, enquanto#!/usr/bin/python
o ignorará.virtualenv
é uma ferramenta bastante popular e instala um executável python no diretório de trabalho. Você precisaria doenv
truque para fazê-lo funcionar corretamente.env python
é o mesmo quepython
. No entanto, o problema é que você não pode escrever um shebang como#!python
: você precisa especificar um caminho completo.