是否可以在不知道要执行的程序路径的情况下指定shebang行?shell脚本shebang for unknown路径
也许不指定路径
#!node
或指定若干选项
#!/usr/local/bin/node
#!/usr/bin/node
跨平台解决方案(Linux操作系统,BSD,OSX等......各种口味的)加分
是否可以在不知道要执行的程序路径的情况下指定shebang行?shell脚本shebang for unknown路径
也许不指定路径
#!node
或指定若干选项
#!/usr/local/bin/node
#!/usr/bin/node
跨平台解决方案(Linux操作系统,BSD,OSX等......各种口味的)加分
/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
将是跨平台和“走正道”。
在shebang之后放置一个空间。如果程序在环境变量PATH中,它应该去。
#! perl
当然,Perl的一个特殊情况是
:
eval 'exec perl -S $0 ${1+"[email protected]"}'
if 0;
这适用于UNIX 和 OSX,即使没有在/ usr/bin中/ ENV由@Jens
注意在OSX上不适用于我 - 但是,感谢 – 2012-08-09 18:49:38
相反的是,人们可能会认为没有对env
标准的位置,所以我们只能抢到关于它的位置的一些信息:
/usr/bin/env
- MacOS的(10.12)/bin/env
,/usr/bin/env
- Fedora的( 25)我确信其他人可以扩展名单。
+1确实是跨平台的。可悲的是,POSIX没有指定'env'的位置,但是我还没有找到一个不在'/ usr/bin'中的系统。任何人都看到一个时髦的操作系统,它不是? – Jens 2012-08-09 19:02:38
是否可以通过在shebang线上连接的多个程序? ('!#/ usr/bin/env cat | nl') – 2012-08-09 19:04:05
不,不可能。如果必须,请使用单独的脚本。 – Jens 2012-08-09 19:05:21