Por que usar env em shebang?

19

Qual é o propósito de usar #!/usr/bin/env <sh|bash|python>shebang em comparação com #!/bin/bash, #!/bin/shou #!/usr/bin/python?

Tuminoide
fonte
4
Há uma boa resposta aqui em relação ao uso geral de env.
Kevin Bowen

Respostas:

11

Algumas pessoas podem usar um python diferente (perl, etc.) que o sistema. /usr/bin/env pythonexecutaria 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 xcomo um substituto para #!foo x, porque foo xserá interpretado como um único argumento. Portanto, o valor da abordagem é discutível.

choroba
fonte
1
Configurado onde? Pelo 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 como env pythonseria diferente python?
Tuminoid
4
Você PATHprovavelmente inclui /usr/local/binprimeiro. Se alguém instalou o python manualmente lá, envo chamará, enquanto #!/usr/bin/pythono ignorará.
precisa saber é o seguinte
2
virtualenvé uma ferramenta bastante popular e instala um executável python no diretório de trabalho. Você precisaria do envtruque para fazê-lo funcionar corretamente.
Flimm
2
@ Tuminoid: você está certo: env pythoné o mesmo que python. No entanto, o problema é que você não pode escrever um shebang como #!python: você precisa especificar um caminho completo.
Andrea Corbellini