リモート サーバーからリストを取得するために、以下のコードを記述しました。
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サーバーからディレクトリへ転送します。ftpFS の、 これはヒューズ裏でlftpを使用するファイルシステム。代替案としては、カールFTPFSFTPではなく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"