linux和Solaris之间的区别/ usr / bin / env

我有一个简单的脚本:

#!/usr/bin/env perl -w print "Hello World\n" 

使这个可执行文件,在Linux上运行,我得到:

 /usr/bin/env: perl -w: No such file or directory 

(没有-w,这工作正常)

在Solaris 8计算机上运行相同的脚本会生成正确的输出。

有什么build议,为什么这是?

这不是env ; 这是内核的#! 处理程序。 第一个单词之后的所有内容( /usr/bin/env )作为单个参数string传递。 最安全/最便携的是在perl之后不要放任何东西。

你在两台机器上使用哪个shell? 另外,您正在使用哪个版本的Solaris和Linux?

你可能在Solaris上默认使用KSH,在Linux上使用BASH。 这种差异可能会影响shebang线的执行方式。

HTH!

汤姆·珀尔

维基百科文章提到了这个可移植性问题:

http://en.wikipedia.org/wiki/Shebang_%28Unix%29

“另一个可移植性问题是对命令参数的解释,有些系统[12]不会将参数分开;例如,当第一行运行脚本时,

我发现这有点令人惊讶,但它是空间的参数parsing的shell,并没有在这里涉及的shell。