次のコードがあります。 scpがすべてを正常にコピーしたことを確認するために、目的の出力をログファイルにリダイレクトするにはどうすればよいですか?このコードはバックグラウンドで実行されます。
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
'
答え1
expect
log_file
ファイルに書き込む奇妙な命名プロセス(ドラムロール...)があるため、通常は次のように言えます。
#!/usr/bin/env expect
set timeout -1
log_file blah.log
...
TCLコードから。詳細については、マニュアルページを参照してくださいlog_file
。log_user
expect(1)
答え2
呼び出し出力をリダイレクトするだけです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
リダイレクトできます。それ出力:
/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
'