2016-03-04 63 views
0

在我的perl腳本的中間,我想執行一個bash命令。該腳本需要很長時間,所以在腳本的開頭我想看看命令是否存在。 This answer說只是試着運行它,this other answer建議一些bash命令來測試程序是否存在。檢查程序是否存在

後者選項是最佳解決方案嗎?有沒有更好的方法在perl中執行此檢查?

+0

你打算立即調用命令嗎? – ikegami

+0

@ikegami不,它的一半通過腳本 – flakes

+0

然後只是運行它是沒有意義的。 – ikegami

回答

1

用perl,你可以測試文件的存在性,可讀性,可執行性等,看看here

因此只使用

executeBashStuff() if -x $filename; 

stat它:

stat($filename); 
executeBashStuff() if -x _; 
+1

「開放」是多餘的。只要'execute_bash_stuff()if -x $ filename'。如果你一直使用'snake_case'變量,你會讓很多熟悉Perl的人感到開心。最終,我不確定這是否回答OP要求的內容 – Borodin

+0

無需對修復進行評論 – Borodin

1

我最好的猜測是,你要檢查您要使用systemqx//

運行可執行文件是否存在

但是,如果您希望命令行的行爲與shell相同,那麼您可以使用File::Which

1

對我來說,似乎最適合運行程序本身(與-V說),每個鏈接。我將使用與稍後用於運行作業相同的調用(通過shell或不通過execvp)。確保你知道它是否拋出錯誤。這也在你的鏈接討論,但我會實際上得到的輸出(而不是發送它)並檢查。這可能是最確定的方式,看看這個東西是否真的在運行,以及它是否是你期望的。

使用-x(如果您知道路徑)檢查可執行文件也很有用,但它只會告訴您具有給定名稱的文件存在並且它是可執行文件。

該系統的which似乎被批評爲可能的(錯誤)行爲,它可能是也可能不是一個shell內建的(這正確地使用它會複雜化),是一種外部效用,它的確切行爲是依賴於系統的。在Borodin的答案中指出的模塊File::Which會更好 - 如果確實比which更好。 (這可能是,我只是不知道。)

從一開始您的處理是否依賴於此?如果沒有,您可能希望在最適合您的代碼的位置執行此操作。我喜歡在實際使用之前或之後堅持這種檢查,如果其他處理按照它的方式進行的話。無論如何,支票是使用它的一部分。


。我不知道什麼「bash命令」是指:內置的bash shell,還是在終端上使用bash的事實? Perl的qxsystem使用了sh shell,而不是bash(如果它們調用shell,這取決於你如何使用它們)。有差異,你不能依賴你的shell配置。如果必須的話,你也可以運行一個shell,qx(/path/bash -c 'comm args')。注意報價。您可能需要使用它來查找系統上的確切語法。例如,請參閱this post(bash-in-qx)。