シェルでexpectを書く方法

シェルでexpectを書く方法

これは前回の質問の続きです:スポーンコマンドが見つかりません

いくつかの古い投稿を参照した後、それらのコマンドを記述しました。間違っている場合は、リモート サーバーに ssh を実行していくつかのコマンドを実行するにはどうすればよいでしょうか?

答え1

1 つの可能性は、expect-syntax ファイルを作成し、それをシェル スクリプト経由で呼び出すことです。

 #!/bin/bash
 expect -f my-file.exp $1 # parameter 1 is the server name

my-file.exp には、expect コマンドのみが含まれます。

spawn ssh "username@[lindex $argv 0]"  # param 1 : server name
                                # expect now reads the input and does what you tell it on certain patterns

expect { 
  "password:" { send "my-password\r"; send "do_this_command\r"; send "do_that_command\r"; exp_continue; }
  "done" { send_user "exiting"; }
}

この例では、クリアテキストのパスワードを送信してサーバーにログオンし、何らかのコマンドを送信して続行します。

入力から「完了」を読み取ると終了します。それ以外の場合は、数秒後にタイムアウトします。

「exp_continue」を実行する限り、expect {} ループ内に留まり、入力を照合して適切な出力を実行します。

答え2

シェルスクリプトで expect シェバンを使用して、expect スクリプトを作成することもできます。

#!/usr/bin/expect -f 
spawn ssh localhost 
expect "password: " 
send "password\r" 
expect "{[#>$]}"         #expect several prompts, like #,$ and >
send -- "command.sh\r"
expect "result of command"
etc...

関連情報