2

Expect perl モジュールを使用して、ローカル ホスト マシンで ssh コマンドを使用して端末をエミュレートするスクリプトを作成しました。以下のシナリオを考えてみましょう。expect モジュールを使用する perl スクリプト (script.pl など) があり、このタイプのコマンドが 2 つあります。

$ssh = Expect->spawn("ssh -Y $loginname\@$systemname") 

ここでの問題は...私は端末を使用してscript.plを実行していますが、私のコードには2つのspawnコマンドがあります。script.pl の実行に使用されるターミナル内で、2 つの spawn コマンドが開始されていることに気付きました。しかし、2 つの spawn コマンド用に 2 つの新しい端末が必要です。したがって、ここには、script.pl 用に 1 つ、script.pl 内の各 spawn コマンド用に 2 つの 3 つのターミナルがあるはずです。

Expectを使用して、単一のperlスクリプトから2つの新しい端末を実現する方法はありますか??

4

1 に答える 1

1

「Expectを使用して単一のperlスクリプトから2つの新しい端末を実現する方法はありますか??」

もちろん。しかし、端末は他のアプリケーションと同じです。明示的に呼び出す必要があります。あなたがスポーンしているのはssh。ターミナルアプリケーションは異種であるため、システムで実行されているターミナルアプリケーションと、起動時にアプリケーションを起動する方法を理解する必要があります。たとえば、Xfce端末の場合は次のようになります。

$ssh = Expect->spawn("Terminal -e \"ssh -Y $loginname\@$systemname\"");

動作するはずです。またはおそらくより良い:

$ssh = Expect->spawn("Terminal", ("-e", "ssh -Y $loginname\@$systemname"));

ただし、端末はおそらくXfce端末ではありません。Windowsを使用している場合は、そうだと思いますcmd。Linuxでは、何がインストールされているかによって異なります。ディストリビューションのデフォルトを使用している場合は、DEに付属している端末になります-GNOME gnome-terminalkonsoleKDEなどの場合。

ただし、他の方法で端末の起動を自動化し、起動時にexpect / sshを使用してスクリプトを実行させる場合は、より理にかなっている可能性があります。

于 2012-05-10T07:30:48.910 に答える