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

関連情報