2016-04-30 45 views
1

如何使用此代碼創建更多命令。目前的版本是2.我如何做3或4或更多?perl通過反引號的3或4行命令

my $startprocess = `(echo "y" | nohup myprocess) &` 

原來的問題由用戶DVK回答:

Can I execute a multiline command in Perl's backticks?

編輯:感謝您的答覆塞巴斯蒂安。 我必須在一行中運行所有內容,因爲我在終端內運行一個程序,並且我想進行漸進式命令。

例如命令1啓動程序。命令2將我導航到菜單。命令3讓我改變設置。命令4讓我發出一個命令,提示我只能在新設置的條件下才能得到響應。

運行多個命令會讓我陷入第一步。

回答

5

您引用的行包含一個管道連接的命令行。這不是運行多個命令。

您是否考慮過使用open

my $pid = open my $fh, '-|', 'myprocess'; 
print $fh "y\n"; 

有沒有必要在一個(反引號)行中運行多個命令,爲什麼不只是使用多個?

$first = `whoami`; 
$second = `uptime`; 
$third = `date`; 

反引號被用來捕獲命令的輸出,system只是運行命令,並返回退出狀態:

system '(echo "y" | nohup myprocess) &'; 

所有解決方案允許多個命令管道連接到一起,因爲這是一個殼特徵和所有的命令只是傳遞命令字符串到shell(除非它足夠簡單處理一下無殼):

擊:

$ ps axu|grep '0:00'|sort|uniq -c|wc 

的Perl:

system "ps axu|grep '0:00'|sort|uniq -c|wc"; 
$result = `ps axu|grep '0:00'|sort|uniq -c|wc`; 
open my $fh, '|-', "ps axu|grep '0:00'|sort|uniq -c|wc"; 

隨時觀看引號:system "foo "bar" baz";不會通過"bar" baz作爲參數傳遞給foo命令。

很多常見的東西在這個答案:請更詳細的問題,以獲得更好的答覆。