如何将expect命令的输出重定向到日志

如何将expect命令的输出重定向到日志

我有以下代码。如何将期望的输出重定向到日志文件以查看 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_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
'

相关内容