我有一个简单的脚本:
#!/usr/bin/env perl -w
print "Hello World\n"
使这个可执行文件在 Linux 上运行,我得到:
/usr/bin/env: perl -w: No such file or directory
(没有 -w,这个也可以)
在 Solaris 8 机器上运行相同的脚本会产生正确的输出。
对于原因何在有什么建议吗?
答案1
它不是env
;它是内核的#!
处理程序。第一个单词 ( /usr/bin/env
) 后面的所有内容都作为单个参数字符串传递。最安全/最便携的方法是不要在后面放置任何内容perl
。
答案2
您在两台机器上使用哪种 shell?另外,您使用哪个版本的 Solaris 和 Linux?
您可能默认在 Solaris 上使用 KSH,而在 Linux 上使用 BASH。这种差异可能会影响 shebang 行的执行方式。
呼呼!
汤姆·普尔
答案3
维基百科文章提到了这个可移植性问题:
http://en.wikipedia.org/wiki/Shebang_%28Unix%29
“另一个可移植性问题是命令参数的解释。有些系统 [12] 不会拆分参数;例如,当运行第一行脚本时……”
我发现这有点令人惊讶,但是正是 shell 对空格上的参数进行了解析,而这里并不涉及 shell。