Não é possível obter o código de saída correto de um script

4

Eu tenho um script que se conecta a um servidor remoto via SFTP e obtém algum arquivo de lá. Meu script é assim:

/usr/bin/sftp [email protected] <<EOF
lcd /dir1/dir2/dir3
cd /rsdir1/rsdir2/rsdir3
get file_pattern'date -d "last month" +%m%Y'.csv
EOF
rc=$?
        if [[ $rc != 0 ]]
           then
        echo "Error occured getting file and the script abended with error code $rc" 'date "+%Y-%m-%d-%H.%M.%S"'
            exit 1
    else
    echo "Successfully transferred the file" 'date "+%Y-%m-%d-%H.%M.%S"'
        fi

No entanto, mesmo que o script não encontre o arquivo com o padrão, ele acessa a parte else do script e fornece a saída na tela como

Connecting to remote.server.com...
sftp> lcd /dir1/dir2/dir3
sftp> cd /rsdir1/rsdir2/rsdir3
sftp> get file_pattern032014.csv
Couldn't stat remote file: No such file or directory
File "/rsdir1/rsdir2/rsdir3/file_pattern032014.csv" not found.
Successfully transferred the file YYYY-MM-DD-24HH.MI.SS 

Algum conselho sobre o que eu posso estar fazendo errado aqui?

    
por Dhruuv 25.04.2014 / 22:34

2 respostas

9

Você obteve o código de retorno correto, a sessão sftp foi executada corretamente para que o código de retorno seja 0.
Você deve usar scp , mas não retorna 0 se não copiar.

Você pode fazer algo como:

file=file_pattern'date -d "last month" +%m%Y'.csv 
[email protected]:/rsdir1/rsdir2/rsdir3/$file
local=/rsdir1/rsdir2/rsdir3/$file

if scp -q $remote $local
then
    echo "Successfully transferred the file" 'date "+%Y-%m-%d-%H.%M.%S"'
else
    echo "Error occured getting file and the script abended with error code $?" 'date "+%Y-%m-%d-%H.%M.%S"'
    exit 1
fi

EDIT: Alterei o destino da cópia para um nome de arquivo: Se você copiar para um diretório e esse diretório estiver faltando, você criará um arquivo que tenha o nome do diretório.

    
por 25.04.2014 / 22:50
2

Tente o seguinte:

/usr/bin/sftp -b - [email protected] <<EOF ...

O "-b -" coloca o sftp no modo batch enquanto continua lendo na linha de comando. O modo em lote irá (no meu sistema) sair do sftp e retornar um código de saída diferente de zero quando um dos comandos sftp falhar.

    
por 25.04.2015 / 03:05