예상 명령의 출력을 로그로 리디렉션하는 방법

예상 명령의 출력을 로그로 리디렉션하는 방법

다음 코드가 있습니다. 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_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
'

관련 정보