원격 서버에서 목록을 가져오기 위해 다음 코드를 작성했습니다.
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를 사용하는 파일 시스템입니다. 대안은 다음과 같습니다컬프트프프스. FTP 대신 SFTP의 경우 다음을 사용하세요.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"