2012-02-04 68 views

回答

8

某些系統在腳本啓動時無法識別#!/usr/bin/perl行,因此試圖在此類系統上按名稱調用Perl程序只會將腳本傳遞到shell。爲了解決這個問題,可移植的Perl程序以一行代碼開始,當由一個標準的POSIX shell解釋時,它會導致腳本被傳遞給perl(1)if 0導致該行在被Perl本身運行時被忽略,並將其放在單獨的行上會導致shell將其視爲單獨的命令,只要讀取它就運行eval 'exec /usr/bin/perl -w -S $0 ${1+"[email protected]"}'

+0

非常感謝!真的很聰明! – 2012-02-04 19:30:49

+1

我不知道是否還有任何系統值得擔心,不支持[shebangs](http://en.wikipedia.org/wiki/Shebang_(Unix))。 – 2012-02-04 19:50:07

+2

我有腳本可以執行此操作,以便它們可以在Solaris和Linux下運行。 shebang指向Solaris perl,但在Linux下,該腳本作爲shell執行,並且eval行執行Linux perl。 perls安裝在奇數位置,但文件/目錄是通過NFS在系統之間共享的。 – runrig 2012-02-04 22:44:04

2

該行在shell和perl下都是有效的。在perl eval由於以下if 0而被跳過。在shell中,使用eval在perl中執行相同的文件。

+0

是的,這個ID也很好的澄清。再次感謝! – 2012-02-04 19:34:03

相關問題