0

私は次のことを行うexpectスクリプトを書き込もうとしています。

13個のターミナルウィンドウ(gnome-terminal、xtermなど)を開きます。各ウィンドウはssh(ssh InReach@10.1.6.254)を介してターミナルサーバーに接続し、expectを介してパスワードが提供されます。

これを1つのウィンドウで正常に機能させることができます。私が抱えている問題は、入力が各ウィンドウに渡されることです。

例えば...

できます

set timeout -1

spawn gnome-terminal -x ssh InReach@10.1.6.254

whileループ内で、13個のウィンドウを取得します。しかし、私はそれぞれがexpectを介して自動的にログインすることを望みます。

4

2 に答える 2

1

少し異なるアプローチを試すことができます。ターミナルウィンドウをexpectスクリプトで開く代わりに、基本的なシェルスクリプトで開き、各ターミナルでexpectスクリプトを実行して、単一のSSHセッションを開始します。

したがって、expectスクリプトは次のように単純にすることができます。

#!/usr/bin/expect -f
spawn ssh InReach@10.1.6.254
# ... provide password ...
interact

そしてシェルスクリプト:

#!/bin/sh
for a in `seq 1 13`; do
    gnome-terminal -x ./expect_script
done
于 2011-09-09T21:01:27.520 に答える
1

スポーンするときは、試行によって設定された$spawn_id値をキャッシュする必要があります。
例えば

if [catch "spawn ssh -l mtc $ub1_ip_address" ub1_pid] {
    Log $ERROR "Unable to spawn ssh to Xubuntu.\n$ub1_pid\n"
    return 0
}
set stored_id $spawn_id

特に1つのターミナルセッションにコマンドを送信するには、

send -i $stored_id "command"

次に、それぞれに連絡する前に、まず

 expect {
-i $stored_id

[...正規表現、グロブなど...]
}

あなたはいくつかの追加情報を見つけることができますhttp://wiki.tcl.tk/11583

また、現在アクティブなタブの表示や実行するコマンドなど、複数のタブを指定するgnome-terminalの機能を利用することをお勧めします。 gnome-terminal --help-all役に立ちます(しゃれは意図されていません)。

于 2011-09-27T03:25:28.537 に答える