2013-06-25 58 views
0

我需要打開新終端,而主腳本仍在運行。在命令行中測試命令時,一切正常,但運行perl腳本時,我的新終端窗口在不到一秒的時間內打開並關閉。要打開主腳本仍在運行時打開新終端

一新的終端窗口:要打開

system ('gnome-terminal', '-x', 'sh', '-c', '"sslstrip -a -k -l 8080 -w sslstrip.log"'); 

二新的終端窗口:

system ('gnome-terminal', '-x', 'sh', '-c', '"tail -f sslstrip.log"'); 

正如我所說的窗口被打開並很快關閉。腳本仍然運行時,我需要它們保持打開狀態。

我已經嘗試過這樣的:

#!/usr/bin/perl -l 

use strict; 
use warnings; 

$| =1; 

open STDOUT, '>-'; 
system("du /usr/lib/perl5 &"); 
close STDOUT; 

open STDOUT, '>-'; 
system("xterm -e du /usr/lib/perl5 &"); 
close STDOUT; 

但仍無法工作的。

回答

0

取出雙引號:

system ('gnome-terminal', '-x', 'sh', '-c', 'sslstrip -a -k -l 8080 -w sslstrip.log'); 

的雙引號引起被當作命令的名稱的整行,而不是一個命令,接着參數。

但是,您需要fork一個子進程並在其中運行該進程,因爲它在前臺運行,並且system()將不會返回,直到gnome-terminal退出。您不能使用&與多參數system()語法,因爲它不運行shell,因此shell元字符不起作用。

+0

它適用於這些行。但是現在我面臨着與系統相同的問題('gnome-terminal','-x','sh','-c','arpspoof -i $ interface -t $ target $ gateway');.是否有另一種解決方案,而不是分娩子進程? – user2520951