lftp código de retorno

1

Eu escrevi abaixo o código para obter uma listagem de um servidor remoto.

echo "set xfer:log yes" > batchfile.txt
echo "set xfer:log-file Templogfile1.txt">> batchfile.txt
echo "open -p $rport -u $ruser,$rpass sftp://$ripaddress">> batchfile.txt
echo "cache flush">> batchfile.txt
echo "cd $rrdir">> batchfile.txt
echo "pwd">> batchfile.txt
echo "ls -l $srfile">> batchfile.txt
echo "quit">> batchfile.txt

exec 3>&1 4>&2                 
exec > TempSessionLog.txt 2>&1 
set -x                         
( 
  lftp -f batchfile.txt >TempLogFile.log <<- EndFTP 
  EndFTP
)  
retval1="$?" 
exec 1>&3 2>&4   
set +x         

Eu passei um nome de diretório incorreto. Um sftp padrão retorna o código de erro ($? != 0) , mas o lftp envia um código de retorno (retval1 = 0) ao sucesso.

No TempSessionLogFile acima, vejo a mensagem de erro cd: Access failed: No such file (<<Directory Path>>) com um valor de retorno bem-sucedido.

Existe uma maneira de capturar os erros no lftp nos códigos de retorno? Se não, quais são minhas alternativas?

    
por user196962 25.10.2016 / 17:36

1 resposta

0

Desde que você não esteja fazendo nada sutil com o protocolo FTP, o que não é o caso aqui, a maneira mais fácil é usar comandos normais de cópia e monte o servidor FTP em um diretório. Você pode usar o LftpFS , que é um FUSE sistema de arquivos que usa o lftp sob o capô. As alternativas incluem CurlFtpFS . Para SFTP em vez de FTP, use SSHFS .

#!/bin/sh
trap 'fusermount -u mnt; rmdir mnt' EXIT INT TERM HUP
set -e
mkdir mnt
sshpass -p"$rpass" sshfs "$ruser@$ripaddress:/" mnt
cd "mnt/$rrdir"
ls -l "$srfile"
    
por 26.10.2016 / 01:47