Registra a saída do comando Expect

3

Eu fiz o script abaixo e preciso registrar a saída desse script.

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

Eu preciso registrar a saída do comando expect em ${LOGFILE} . Como pode ser feito?

Eu tentei adicionar as coisas abaixo, não funciona. O que poderia ser feito?

/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
    
por sabarish jackson 11.07.2016 / 07:59

2 respostas

0

Parece que o LOGFILE está fora do escopo, você o exportou. Veja variáveis de ambiente.

Você precisa exportar uma variável para o ambiente ou passá-la como um argumento.

por exemplo. Digamos que seu programa seja chamado de abc e faça:

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

ou

LOGFILE=./logdir/logfile ./abc

Como alternativa, passe como argumento:

./abc "./logdir/logfile"

E tem no programa:

logfilename="$1"
    
por 11.07.2016 / 10:52
0

O redirecionamento mencionado abaixo está funcionando bem agora. Não adicionei nada de novo.

/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
    
por 12.07.2016 / 07:39