0

メイン スクリプトがまだ実行されている間に、新しいターミナルを開く必要があります。コマンド ラインでコマンドをテストするときはすべて問題ありませんが、perl スクリプトを実行すると、新しいターミナル ウィンドウが 1 秒もかからずに開いたり閉じたりします。

最初に開く新しいターミナル ウィンドウ:

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

2 番目に開く新しいターミナル ウィンドウ:

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; 

しかし、まだ機能していません。

4

1 に答える 1

0

二重引用符を取り出します。

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

二重引用符により、コマンドの後に引数が続くのではなく、行全体がコマンドの名前として扱われていました。

ただし、これはフォアグラウンドで実行され、終了system()するまで返されないため、子プロセスをフォークしてそこで実行する必要がありgnome-terminalます。&複数引数の構文では使用できませんsystem()。これは、シェルを実行しないため、シェルのメタ文字が機能しないためです。

于 2013-06-25T19:06:45.807 に答える