lftp返回码

lftp返回码

我编写了下面的代码来从远程服务器获取列表。

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         

我传递了错误的目录名称。标准 sftp 返回错误代码($? != 0),但 lftp 发送成功(retval1 = 0)返回代码。

在上面,我看到带有成功返回值的TempSessionLogFile错误消息。cd: Access failed: No such file (<<Directory Path>>)

有没有办法捕获lftp中返回码的错误?如果没有,我有什么选择?

答案1

只要您不使用 FTP 协议做任何微妙的事情(这里不是这种情况),简单的方法就是使用普通的复制命令,并且FTP 服务器到一个目录。您可以使用LftpFS,这是一个保险丝在底层使用lftp的文件系统。替代方案包括卷曲FTPFS。对于 SFTP 而不是 FTP,请使用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"

相关内容