Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在带有';#的perl脚本中设置污染模式/usr/bin/env perl';-舍邦?_Perl_Shebang_Taint - Fatal编程技术网

如何在带有';#的perl脚本中设置污染模式/usr/bin/env perl';-舍邦?

如何在带有';#的perl脚本中设置污染模式/usr/bin/env perl';-舍邦?,perl,shebang,taint,Perl,Shebang,Taint,如何在perl脚本中使用 #!/usr/bin/env perl shebang?由于污染模式只能通过-T标志启用,并且env不会接受shebang行中的任何标志,因此最好的选择是通过perl-T script.pl运行程序,而不是直接执行脚本 如果您确实需要在shebang中强制执行污染模式,您可以在路径(例如/usr/local/bin)中的某个位置创建一个包含以下内容的taintperl脚本: #!/bin/sh /usr/bin/env perl -T 然后在Perl脚本中,使用 #

如何在perl脚本中使用

#!/usr/bin/env perl

shebang?

由于污染模式只能通过
-T
标志启用,并且
env
不会接受shebang行中的任何标志,因此最好的选择是通过
perl-T script.pl
运行程序,而不是直接执行脚本

如果您确实需要在shebang中强制执行污染模式,您可以在路径(例如/usr/local/bin)中的某个位置创建一个包含以下内容的
taintperl
脚本:

#!/bin/sh
/usr/bin/env perl -T
然后在Perl脚本中,使用

#!/usr/bin/env taintperl

您可以在shebang行上传递PERL5OPT环境变量:

#!/usr/bin/env PERL5OPT=-T perl
对我来说,这一切似乎都很落后

另一个选项是,如果检测到脚本未打开,则在污染模式下重新执行脚本:

#!/usr/bin/env perl

warn 'Taint mode is '.(${^TAINT} ? 'on' : 'off'); # For debugging

exec($^X,'-T',$0,@ARGV) unless ${^TAINT};

# do stuff under taint mode here

显然,这是对启动性能的重大打击。

在许多操作系统上,您不能使用解释脚本作为脚本解释器。您必须在编译语言中执行此操作,例如。C@GavinBrock这对于紧跟在
#之后提到的程序来说是正确的。这里是编译的
/usr/bin/env
。反过来,
env
不关心
traintPerl
是否是编译程序。如果无法预测perl二进制文件(/usr/bin或/usr/local/bin)的位置,它会有所帮助我想问题是你能否预测env的位置……在我的PC上我使用/usr/local/bin/perl,在我的上网本上使用/usr/bin/perl。因此,使用/usr/bin/env perl,我不必更改我的perl脚本。我想他们会在我的操作系统的下一个版本中发布perl版本5.10.1,所以也许我会在我的电脑上再次使用带/usr/bin/perl的内置perl,在那里我也不必更改我的shebangs。Gavin,
env
的位置是标准化的。@daxim,除非你使用OpenServer 5.0.6(SCO)或Unicos 9.0.2(Cray);-)@Sinan,如果您曾经使用perlbrew并在您的系统上安装了多个perl,那么使用
/usr/bin/env perl
是一个错误,您不能在带有/usr/bin/env的shebang中实际指定变量。这样做将导致env在一个无限循环中执行自己,甚至无法访问请求的命令。我在Linux和FreeBSD上都做了测试。是的,这似乎是目前唯一支持第一个咒语的OS-X。