2017-08-03 64 views
1

什麼是打破具有正在由「`」執行系統命令長行的最佳方式最佳方式命令

例如:

my @data = `cat data.txt | perl -ne '/CTX:|ed-as-of time:\\s+(\\w+)\\s+[Feb|Mar|April|May]/ && print' | sed '\$!N;/Sync/P;D'|sed 'N;s/\\n/ /'`; 

我試圖打破它使用「`」。如下所示,但會出現錯誤(sh:1:語法錯誤:文件意外結束:)。

my @data = `cat data.txt | `. 
      `perl -ne '/CTX:|ed-as-of time:\\s+(\\w+)\\s+[Feb|Mar|April|May]/ && print' | sed '\$!N;/Sync/P;D'|sed 'N;s/\\n/ /'`; 

回答

4

最好的方法是在一個標量變量

$cmd = "command1 --foo --bar | command2 2>log.err | " 
    . " command3 --are-we-done-yet | ..."; 
@data = `$cmd`; # or @data = qx($cmd) 

或將其組裝作爲參數傳遞給readpipe

@data = readpipe("command1 --foo --bar | command2 >log.err | " 
       . "command3 --are-we-done-yet | ..."); 
組裝命令