我有一个简单的脚本:
#!/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。