Expect 명령의 출력을 기록하세요.

Expect 명령의 출력을 기록하세요.

다음과 같은 예상 스크립트를 만들었으며 이 스크립트의 출력을 기록해야 합니다.

SOURCE_FILE=`ls -l *.txt --time-style=+%D | grep ${DT} | grep -v '^d' | awk '{print $NF}' `
if [ -n "${SOURCE_FILE}" ]
then
    cp -p ${SOURCE_FILE} ${T_FILES}
    /usr/bin/expect<<EOD

        set timeout 60
        spawn   sftp $ES_SFTP_USER@$ES_SFTP_HOST_NAME:$R_LOCATION
        expect "*?assword:"
        send "$password\r"
        expect "sftp>"
        send "put /opt/AppServer/ES_TEST/todays_report/*.txt\r"
        expect "sftp>"
        send "bye\r"
        expect EOD
    EOD
else
    echo "No Files to copy" >> ${LOGFILE}
fi

Expect 명령의 출력을 기록해야 합니다 ${LOGFILE}. 어떻게 해야 합니까?

다음을 추가하려고 시도했지만 작동하지 않습니다. 무엇을 할 수 있나요?

/usr/bin/expect<<EOD >> ${LOGFILE} 2>&1

set timeout 60
spawn   sftp $ES_SFTP_USER@$ES_SFTP_HOST_NAME:$R_LOCATION
expect "*?assword:"
send "$password\r"
expect "sftp>"
send "put /opt/AppServer/ES_TEST/todays_report/*.txt\r"
expect "sftp>"
send "bye\r"
expect EOD
EOD

답변1

LOGFILE이 범위를 벗어난 것 같습니다. 내보냈나요? 환경 변수를 참조하세요.

변수를 환경으로 내보내거나 매개변수로 전달해야 합니다.

예를 들어, 프로그램이 호출되어 abc다음을 수행한다고 가정합니다.

LOGFILE=./logdir/logfile
export LOGFILE
./abc

또는

LOGFILE=./logdir/logfile ./abc

또는 매개변수로 전달됩니다.

./abc "./logdir/logfile"

그리고 프로그램에는 다음이 있습니다.

logfilename="$1"

답변2

아래에 언급된 리디렉션이 이제 제대로 작동합니다. 나는 새로운 것을 추가하지 않았습니다.

/usr/bin/expect<<EOD > ${LOGFILE}

set timeout 60
spawn   sftp $ES_SFTP_USER@$ES_SFTP_HOST:$R_LOCATION
expect "*?assword:"
send "$password\r"
expect "sftp>"
send "put /opt/AppServer/ES_billing_report/todays_report/*.txt\r"
expect "sftp>"
send "bye\r"
expect EOD
EOD

관련 정보