2015-11-18 121 views
1

我正在嘗試source來自Perl腳本(script.pl)的腳本。如何從perl腳本運行「source」命令(Linux)?

system ("source /some/generic/script"); 

請注意,此通用腳本可能是shell,python或任何其他腳本。另外,我不能將這個通用腳本中的邏輯複製到我的Perl腳本中。我嘗試用``,execqx//替換system。每次我得到了以下錯誤:

不能Exec的「源」:在script.pl行沒有這樣的文件或目錄18

我在許多論壇來在互聯網上,其中討論了各種這個問題的原因。但他們都沒有提供解決方案。有沒有辦法從Perl腳本運行/執行source命令?

回答

1

你不能。 source是一個shell函數,可將該腳本的內容「導入」到當前環境中。這不是可執行文件。

可以複製它的一些功能,通過滾動自己 - 運行或解析無論你是「採購」和捕捉到的結果:

print `. file_to_source; echo $somevar`; 

或相似。

5

在bash等中,source是內建的,表示讀取此文件,並在本地解釋它(有點像#include)。

在這種情況下沒有任何意義 - 您需要從命令中刪除source,並在shell腳本的開頭有一個shebang(#!)行,告訴系統使用哪個shell來執行該腳本,或者您需要明確告訴system使用哪個shell,例如

system "/bin/sh", "/some/generic/script"; 

[有關它是否真正適合在這種情況下使用system無可奉告。

+0

如果我不知道(不確定)它是哪種(shell或其他)腳本,該怎麼辦?在我的例子中,待調用的腳本在文件的開頭沒有shebang('#!')行。 – Anand

+0

在這種情況下,它需要一個。恕我直言*每個*解釋腳本應該有一個。 – Alnitak

+0

如果它沒有shebang,你必須假定它是用'/ bin/sh'來執行的。 – chepner