我想使用env运行perl -w。在命令行中工作正常:
$ /bin/env perl -we 'print "Hello,world!\n"' Hello,world!
但是它在脚本中的shebang行上不起作用:
#!/bin/env perl -w print "Hello,world!\n";
这是错误:
/bin/env: perl -w: No such file or directory
显然env不明白我传给perl的-w标志。怎么了?
解决方法
hash-bang不是一个正常的shell命令行,解析和空格处理是不同的 – 这就是你打的。看到:
> http://www.in-ulm.de/~mascheck/various/shebang/
> http://homepages.cwi.nl/~aeb/std/hashexclam-1.html#ss1.3
> http://en.wikipedia.org/wiki/Shebang_(Unix)
基本上很多/大多数unix将所有剩下的文本放在第一个空格之后变成一个参数。
所以:
#!/bin/env perl -w
相当于:
/bin/env "perl -w"
所以您需要以其他方式处理perl解释器的任何选项。即
use warnings;
(如@ Telemachus)