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