我想使用perl -w
运行env
。这在命令行上正常工作:
$ /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
无法理解我传递给-w
的{{1}}标志。怎么了?
答案 0 :(得分:25)
hash-bang不是一个普通的shell命令行,解析和空白处理是不同的 - 这就是你所遇到的。参见:
基本上很多/大多数unix将第一个空格后的所有剩余文本放入一个参数中。
所以:
#!/bin/env perl -w
相当于:
/bin/env "perl -w"
所以你需要以其他方式处理perl解释器的任何选项。即
use warnings;
(如@ Telemachus)
答案 1 :(得分:15)
而不是-w
使用警告编译指示(对于现代版本的Perl):
#!/bin/env perl
use warnings;
use strict;
答案 2 :(得分:5)
我认为提出“-w”与“使用警告”不同可能是有用的。 -w将适用于您使用的所有包,“使用警告”仅适用于词法。您通常不想使用或依赖“-w”
答案 3 :(得分:2)
值得注意的是,Mac OS X在shebang之后将字符解释为参数,因此在OS X上,以下内容将起作用:
#!/usr/bin/env perl -wT
enter code here
但是,由于使用#!/ usr / bin / env的一个要点是促进跨平台兼容性,因此即使您主要使用Mac,也最好不要使用该语法。
答案 4 :(得分:-1)
您忘记了/usr
目录。