我有Perl腳本開始#!/usr/bin/perl
或#!/usr/bin/env perl
調用Perl腳本
首先,什麼是第二個版本是什麼意思?
其次,我使用Ubuntu。所有的腳本都被設置爲可執行文件。當我嘗試通過簡單地調用腳本來運行腳本(例如./script.pl
)時,我得到: No such file or directory
。當我通過perl ./script.pl
調用它運行良好。
爲什麼?
我有Perl腳本開始#!/usr/bin/perl
或#!/usr/bin/env perl
調用Perl腳本
首先,什麼是第二個版本是什麼意思?
其次,我使用Ubuntu。所有的腳本都被設置爲可執行文件。當我嘗試通過簡單地調用腳本來運行腳本(例如./script.pl
)時,我得到: No such file or directory
。當我通過perl ./script.pl
調用它運行良好。
爲什麼?
的#!/usr/bin/env perl
使用標準的POSIX工具env
解決「問題」是UNIX不支持家當線相對路徑(據我所知)的家當不被處理。可以使用env
工具在修改環境變量後啓動程序(本例中爲perl)。在這種情況下,不會修改任何變量,然後env
將搜索Perl的PATH並運行它。因此,即使Perl未安裝在/usr/bin
中,但在其他某個路徑(必須位於PATH變量中)中,具有該特定shebang行的腳本也能正常工作。
然後,你的問題./script.pl
不工作:你說它有可執行的位設置,就像chmod +x script.pl
?但它是否也以一個shebang(#!
)行開始?也就是說,前兩個字節必須是#!
,並且後面必須跟一個文件路徑(到perl)。有必要告訴內核運行這個腳本的程序。如果你這樣做了,路徑是否正確?你想嘗試#!/usr/bin/env perl
變種;-)
腳本的第一行是'#!/ usr/bin/env perl'。我也嘗試用'#!/ usr/bin/perl'替換它(它確實存在於我的系統中),但是也沒有提供相同的錯誤信息。 – 2010-08-30 07:59:04
@David B:哪些'env'和'哪個perl'說? – Dummy00001 2010-08-30 12:51:34
@ Dummy00001:'$ which env' =>'/ usr/bin/env','$ which perl' =>'/ usr/bin/perl' – 2010-08-30 13:50:49
使用#!/usr/bin/env perl
解決了每個系統上不一定在/usr/bin
上的問題perl
;它只是存在,使劇本更加便攜
在一個相關的說明,您的第二個問題,有一個/usr/bin/perl
和/或/usr/bin/env
?如果沒有,那就可以解釋爲什麼直接運行腳本不起作用;如果您運行的腳本作爲參數傳遞給perl
只是爲了澄清 - 如果運行'perl腳本'它會忽略shebang行中的任何路徑,但它會查看行中的任何選項標誌。 – justintime 2010-08-30 08:45:43
只是爲了澄清邊緣情況下的說明:如果運行「perl腳本」,它會忽略shebang行中的任何路徑(如果(且僅當)shebang行包含單詞「perl」時)。如果你把「#!/ bin/sh」放在裏面,perl足夠聰明,可以爲你執行sh。 – 2010-08-30 09:48:16
長鏡頭的位 - 他們是你從某處下載的腳本,並且你可能在文件而不是LF中獲得了CR LF行尾。 – justintime 2010-08-30 08:52:06
'哪個perl'說什麼? – 2010-08-30 09:26:53
'哪個perl'說'/ usr/bin/perl'。這些是我編寫的腳本(並且仍在編寫)。我只在Ubuntu上工作。 – 2010-08-30 11:30:40