Shell脚本shebang为未知的道路

时间:2012-08-09 18:40:42

标签: shell shebang env

是否可以在不知道要执行的程序路径的情况下指定shebang行?

可能没有指定路径

#!node

或指定多个选项

#!/usr/local/bin/node
#!/usr/bin/node

跨平台解决方案的额外点(各种风格的linux,BSD,OSX等......)

4 个答案:

答案 0 :(得分:16)

/usr/bin/env专门用于跨平台解决方案。

env executes utility after modifying the environment as specified on
the command line.  The option name=value specifies an environmental
variable, name, with a value of value.  The option `-i' causes env
to completely ignore the environment it inherits.

If no utility is specified, env prints out the names and values of
the variables in the environment, with one name=value pair per line.

以下内容:

#!/usr/bin/env node

将是跨平台和“正确的方式”。

答案 1 :(得分:0)

与人们可能认为env没有标准位置的情况相反,所以我们只能获取有关它位置的一些信息:

  • /usr/bin/env - MacOS(10.12)
  • /bin/env/usr/bin/env - Fedora(25)

我相信其他人可以扩展名单。

答案 2 :(得分:-2)

在shebang之后放一个空格。如果程序在环境变量PATH中,它应该去。

#! perl

当然,Perl的一个特例是

:
eval 'exec perl -S $0 ${1+"$@"}'
  if 0;

这适用于unix OSX,即使没有@Jens所指出的/ usr / bin / env

答案 3 :(得分:-3)

不要使用shebang。

node <<eof
your node program here
eof