次のコードがあります。 scpがすべてを正常にコピーしたかどうかを確認するために、expectの出力をログファイルにリダイレクトするにはどうすればよいですか。このコードの一部はバックグラウンドで実行されます。
export L_SRC_SID L_SID MOUNT_POINT SERVICE_PASS APP_SERVER_1 SRC_MOUNT_POINT
#And now transfer the file over
/usr/bin/expect -c '
set timeout -1
cd /$env(MOUNT_POINT)/$env(L_SID)/apps
spawn scp -pr apps$env(L_SRC_SID)@$env(APP_SERVER_1):/$env(SRC_MOUNT_POINT)/$env(L_SRC_SID)/apps/* .
expect {
yes/no { send yes\r ; exp_continue }
password: { send $env(SERVICE_PASS)\r }
}
expect eof
'
expect
には奇妙な名前の_log_file
_プロシージャがあり、(drumroll ...)ファイルにログを記録するので、通常は単に
_#!/usr/bin/env expect
set timeout -1
log_file blah.log
...
_
tCLコード内。詳細については、expect(1)
のmanページの_log_file
_(および_log_user
_)も参照してください。
expect
の呼び出しの出力をリダイレクトするだけです。
/usr/bin/expect -c '
set timeout -1
cd /$env(MOUNT_POINT)/$env(L_SID)/apps
spawn scp -pr apps$env(L_SRC_SID)@$env(APP_SERVER_1):/$env(SRC_MOUNT_POINT)/$env(L_SRC_SID)/apps/* .
expect {
yes/no { send yes\r ; exp_continue }
password: { send $env(SERVICE_PASS)\r }
}
expect eof
' >> /path/to/logfile 2>> /path/to/errorfile
または、scp
の出力のみをキャプチャする場合は、リダイレクトits出力のみ:
/usr/bin/expect -c '
set timeout -1
cd /$env(MOUNT_POINT)/$env(L_SID)/apps
spawn scp -pr apps$env(L_SRC_SID)@$env(APP_SERVER_1):/$env(SRC_MOUNT_POINT)/$env(L_SRC_SID)/apps/* . >> /path/to/logfile 2>> /path/to/errorfile
expect {
yes/no { send yes\r ; exp_continue }
password: { send $env(SERVICE_PASS)\r }
}
expect eof
'