다음과 같은 예상 스크립트를 만들었으며 이 스크립트의 출력을 기록해야 합니다.
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