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

Вынимает doublequotes:

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

В doublequotes вызвал всю строку будет рассматриваться как имя команды, а не команды следует аргументы.

Тем не менее, вам нужно разблокировать дочерний процесс и запустить его там, так как он работает на переднем плане, а system() не вернется, пока не появится gnome-terminal. Вы не можете использовать & с синтаксисом с несколькими аргументами system(), потому что он не запускает оболочку, поэтому метасимволы оболочки не работают.

+0

Это работало для этих линий. Но теперь я столкнулся с той же проблемой с системой («gnome-terminal», «-x», «sh», «-c», «arpspoof -i $ interface -t $ target $ gateway») ;. Есть ли другое решение, чем разветвление дочернего процесса? – user2520951