接続をテストするためにいくつかのIPにSSH接続するexpectスクリプトを書いています。スクリプトを呼び出すマシン上のファイルに各テストの結果を書き込むための「puts」ステートメントを含めたいと思います。putsがファイルに書き込むためのマニュアルに従っていると思いますが、それはstdoutにのみ書き込みます。以下のスクリプトを参照してください。最終的に、ファイルはローカルマシン上に作成されますが、出力はローカルマシンに送信されません。代わりに、出力はstdoutに送られます。
#!/bin/bash
USER=user
PASSWORD=password
IPSTART=12.34.56.
OUTFILE="TEST.log"
PROMPT="#"
for IPEND in `seq 200 231`
do
expect -c "
set timeout 3
set chan [open $OUTFILE w]
spawn ssh $USER@$IPSTART$IPEND
expect -re \".*ssword.*\" {send \"$PASSWORD\n\"}
expect {
-re \".*Are you sure you want to continue connecting.*\" {send \"yes\n\"; exp_continue}
-re \".*$PROMPT.*\$.*\" {puts $chan \"$IPSTART$IPEND\n\"; send \"exit\n\"}
}
close $chan
"
done
見積もりに問題があるのではないかと思いますが、わかりません。
参考までに、これはhttp://www.tcl.tk/man/tcl8.4/TclCmd/puts.htmの例です。
set chan [open my.log a]
set timestamp [clock format [clock seconds]]
puts $chan "$timestamp - Hello, World!"
close $chan