2014-11-23 120 views
0

我在Perl .pl文件中有以下代碼。你覺得有這個代碼的任何問題(我不明白怎麼會在2號線的工作有一個「|」它後面沒有命令字符)Perl代碼 - 管道「|」在`open()`語句中

while ($temp ne "") { 
     open(PS, "ps -ef | grep deploy.sh | grep ssh | grep -v grep|"); 
     $temp = <PS>; 
     close(PS); 
     print "The Deploy scripts are still running. Now sleeping 20\n"; 
     sleep 20; 
} 
+1

爲什麼它的價值是一種用'ps -ef | grep進程| grep -v grep'是'ps -ef | grep [p] rocess'。 – pilcrow 2014-11-23 04:01:14

回答

3

雜散|是Perl的一種說法,您希望將該命令的輸出提供給您的程序。有幾種等同的形式。

看看這裏:open - perldoc.perl.org。特別在這行:

open(FOO, "cat -n '$file'|"); 
2
open(my $FOO, "foo"); 

打開文件進行讀取,而

open(my $FOO, "foo |"); 

告訴Perl foo是一個命令來運行,其輸出是通過管道輸送到文件句柄$FOO

1

由於開(FOO,「富|」)從FOO剛讀foo的命令的輸出,在foo的命令的輸出每條線將成爲FOO文件中的一行。下面將是相同的外殼命令「PS -ef」:

open(PS, 'ps -ef |'); 
while (<PS>) { print $_ } 

在樣品的第二行中的命令是殼管過濾列表以產生上「deploy.sh」的正在運行的實例,如果文件有一行,那麼仍然有實例正在運行,這就是爲什麼它只讀取$ temp變量中的第一行輸入。