expect の使い方メモ(expect eofとか)

expect でコマンドを実行させ、そのコマンドの完了を待って続けて別なコマンドを実行させる場合は"expect eof"を入れるとよい。

# spawn したコマンドが完了してから別なコマンドをspawnする場合は expect eof を挟む。

expect -c "
spawn scp hoge@fuga.com:/home/hoge/somefile .
expect eof

spawn scp hoge@fuga.com:/home/hoge/otherfile .
expect eof
"

# expectコマンドの次にshellとかのコマンドを打つ場合も expect eofする。
# でないと、spawnしたコマンドの完了を待たずに次に行ってしまう。
echo "scp completed."

このような使い方ではなくて、例えば「expectでssh等のコマンドを自動実行し、ログインできたら処理をユーザに戻す」といった場合は、プロンプト文字をexpectして exit するか、spawn した後に interact すればよいっぽい。

expect -c "
spawn ssh hoge@fuga.com
expect \"password:\"
send \"passwd\"

expect \"$\"
exit
"

もしくは

expect -c "
spawn ssh hoge@fuga.com
expect \"password:\"
send \"passwd\"

interact
"