我編寫了下面的程式碼來從遠端伺服器獲取列表。
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"