Não é env
; é o manipulador #!
do kernel. Tudo após a primeira palavra ( /usr/bin/env
) é passado como uma única string de argumento. O mais seguro / portátil é não colocar nada depois do perl
.
Eu tenho um script simples:
#!/usr/bin/env perl -w
print "Hello World\n"
Torne este executável, executado no Linux, e recebo:
/usr/bin/env: perl -w: No such file or directory
(sem o -w, isso funciona bem)
A execução do mesmo script em uma máquina do Solaris 8 produz a saída correta.
Alguma sugestão sobre o porquê disso?
Qual shell você está usando nas duas máquinas? Além disso, qual versão do Solaris e do Linux você está usando?
É possível que você esteja usando o KSH no Solaris por padrão e o BASH no Linux. Essa diferença pode afetar como a linha shebang é executada.
HTH!
Tom Purl
O artigo da Wikipédia menciona esses problemas de portabilidade:
"Outro problema de portabilidade é a interpretação dos argumentos do comando. Alguns sistemas [12] não dividem os argumentos; por exemplo, ao executar o script com a primeira linha como ..."
Achei isso um pouco surpreendente, mas é o shell que faz a análise de argumentos em espaços, e não há um shell envolvido aqui.