Escrevi o código abaixo para obter 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
Passei um nome de diretório incorreto. Um sftp padrão retorna um código de erro, ($? != 0)
mas o lftp envia um (retval1 = 0)
código de retorno de sucesso.
Acima TempSessionLogFile
, 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 do lftp nos códigos de retorno? Se não, quais são minhas alternativas?
Responder1
Contanto 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 emontaro servidor FTP para um diretório. Você pode usarLftpFS, que é umFUSÍVELsistema de arquivos que usa lftp nos bastidores. As alternativas incluemCurlFtpFS. Para SFTP em vez de FTP, useSSHFS.
#!/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"