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

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 机器上运行相同的脚本会产生正确的输出。

对于原因何在有什么建议吗?

答案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。

相关内容