予測コマンドの出力をログにリダイレクトする方法

予測コマンドの出力をログにリダイレクトする方法

次のコードがあります。 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

expectlog_fileファイルに書き込む奇妙な命名プロセス(ドラムロール...)があるため、通常は次のように言えます。

#!/usr/bin/env expect
set timeout -1
log_file blah.log
...

TCLコードから。詳細については、マニュアルページを参照してくださいlog_filelog_userexpect(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
'

関連情報