2011-11-29 195 views
1

如何將命令發送到perl腳本中的終端?從腳本向終端發送命令

例如,如果我想在控制檯中運行命令mkdir $directory,我該在perl腳本中輸入什麼內容?

+0

http://www.perlhowto.com/創建在當前工作目錄一個目錄執行expire_commands我相信應該有所幫助 – Joe

回答

4

建模關閉文檔中的代碼示例在http://perldoc.perl.org/functions/system.html

@args = ("mkdir", $directory); 
system(@args) == 0 
    or die "mkdir failed"; 

Perl可以使目錄,而system()電話,但我相信你想要做其他的東西,只是使用的mkdir作爲一個例子。

+0

也可以在命令周圍使用反引號來捕獲輸出,如果你需要的話(例如$ i ='cat foo.txt'將foo.txt的內容放入$ i) – Nialscorva

+4

@Nialscorva:或者'如果你需要繞過Markdown'$ i = qx {cat foo.txt}'。 –

4

由於Perl有建於mkdir()系統調用,你並不需要在所有使用system命令:

my $directory = "..."; 
if (mkdir $directory) 
{ 
    croak "Failed to create directory $directory ($!)"; 
} 

如果必須使用system,這樣做的安全方法:

if (system "mkdir", $directory) 
{ 
    croak "Failed to create directory $directory"; 
} 

這種形式的system語句(帶有參數列表)避免了shell擴展的問題。

+0

還有File :: Path軟件包,它一次可以創建或刪除多個關卡。 –

0

使用perl命令而不是依賴shell命令。 perl可以做很多事情,如果它不是built incore module,它可能在CPAN上可用。

正如人們所提到的,mkdir可用,所以大多數basic file related commands

話雖這麼說,這裏的shell命令的污垢在Perl:

你想要的所有Perl腳本:

  • 等待在執行shell命令並檢查其退出狀態。 使用system
  • 等待並捕獲shell命令的標準輸出。使用qx//或 反引號。
  • 放棄perl腳本來運行另一個命令。使用 exec。但通常情況下,您不會真的想要使用exec,因爲上述鏈接中描述的 原因。
  • 運行系統命令和管道輸入或輸出到/從它。使用 open和MODE分別爲-||-
+0

應該強調的是'exec'不會返回到調用程序,即運行perl代碼的perl進程被'exec''程序替代。這意味着調用'exec'後的代碼永遠不會執行,除非exec不能調用程序。 –

+0

@danielkullmann好點。我從來沒有真正使用'exec',除了學習從未使用它,大約10-15年前。 =) – TLP

5

對於從Perl腳本執行任意系統命令,你需要使用系統命令用反引號

爲電子商務。摹

在你的情況,用於創建你需要輸入

系統(mkdir $directory)目錄; #note HTML是不顯示的反引號,但反引號是發生之前的mkdir和$目錄後

它將在$目錄的名稱