Diferenças entre o Linux e o Solaris / usr / bin / env

6

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?

    
por Tim T. 15.03.2011 / 18:48

3 respostas

5

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 .

    
por 15.03.2011 / 18:54
0

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

    
por 15.03.2011 / 18:51
0

O artigo da Wikipédia menciona esses problemas de portabilidade:

link

"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.

    
por 17.03.2011 / 01:00