código de retorno ftp

código de retorno ftp

He escrito el siguiente código para obtener una lista de un 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         

He pasado un nombre de directorio incorrecto. Un sftp estándar devuelve un código de error, ($? != 0)pero un lftp envía un código de retorno exitoso (retval1 = 0).

En lo TempSessionLogFileanterior, veo el mensaje de error cd: Access failed: No such file (<<Directory Path>>)con un valor de retorno exitoso.

¿Hay alguna manera de capturar los errores en lftp en los códigos de retorno? Si no, ¿cuáles son mis alternativas?

Respuesta1

Siempre y cuando no esté haciendo nada sutil con el protocolo FTP, que no es el caso aquí, la forma más sencilla es utilizar comandos de copia normales ymontarel servidor FTP a un directorio. Puedes usarLftpFS, el cual es unFUSIBLEsistema de archivos que usa lftp bajo el capó. Las alternativas incluyenCurlFtpFS. Para SFTP en lugar de FTP, utiliceSSHFS.

#!/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"

información relacionada