2013-06-25 57 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