2010-03-27 66 views
9

如何設置在Perl腳本的感染模式與如何在'#!/ usr/bin/env perl'- shebang中設置perl腳本中的污點模式?

#!/usr/bin/env perl 

家當?

+2

如果無法預測perl二進制文件(/ usr/bin或/ usr/local/bin)的位置,它會有所幫助。 http://www.perlmonks.org/?node_id=716740 - 我想問題是你是否可以預測env的位置... – 2010-03-27 16:18:48

+3

在我的電腦上,我使用/ usr/local/bin/perl和我的上網本/ USR /斌/ perl的。因此,使用/ usr/bin/env perl我不必更改我的perl腳本。我想他們會用perl-version 5.10.1發佈我的操作系統的下一個版本,所以也許我會在我的PC上再次使用/ usr/bin/perl的onboard-perl,在那裏我也不需要改變我的shebangs。 – 2010-03-28 14:13:04

+0

加文,'env'的位置是標準化的。 – daxim 2010-03-29 11:22:43

回答

11

你可以通過在家當線PERL5OPT環境變量:

​​

這似乎對我而言倒退一些。

另一種選擇是,如果你發現它不是在感染模式重新執行該腳本:

​​3210

很顯然,這是一個重大的啓動性能損失。

+3

你實際上不能用/ usr/bin/env在shebang中指定一個變量。這樣做會導致env在無限循環中執行自己,甚至不會獲得所要求的命令。我對Linux和FreeBSD都進行了測試。 – Zed 2014-11-20 21:52:20

+1

是的 - 它似乎只是OS-X,目前支持第一個咒語。 – 2015-01-06 14:30:10

2

由於污染模式只能通過-T標誌被啓用,並且env不會接受在shebang行的任何標誌,最好的選擇是通過perl -T script.pl運行的程序,而不是直接執行腳本。

如果您確實需要強制執行污染模式的家當,你可以用下面的內容做一個taintperl腳本某處在PATH(例如,/ usr/local/bin目錄):

#!/bin/sh 
/usr/bin/env perl -T 

然後在你的Perl腳本,有

#!/usr/bin/env taintperl 
+0

在許多操作系統上,你不能使用解釋腳本作爲腳本解釋器。您必須以編譯的語言來完成此操作,例如C# – 2010-03-27 11:31:33

+2

@GavinBrock對'#!'後面提到的程序是這樣的。這裏是編譯的'/ usr/bin/env'。反過來,'env'並不關心'taintperl'是否是一個編譯好的程序。 – maxelost 2016-03-10 23:40:49