![如何检测我是否有权访问 FTP 服务器上的资源?](https://linux22.com/image/804425/%E5%A6%82%E4%BD%95%E6%A3%80%E6%B5%8B%E6%88%91%E6%98%AF%E5%90%A6%E6%9C%89%E6%9D%83%E8%AE%BF%E9%97%AE%20FTP%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84%E8%B5%84%E6%BA%90%EF%BC%9F.png)
我正在尝试编写 bash 脚本以便使用将文件从本地机器复制到 FTP lftp
。
问题是,当有人输入无法访问的路径mkdir
或时put
,则lftp
返回:
Access failed: 550 /: Device or resource busy
我的 Bash 脚本卡住了,无法终止。
在执行下一个命令之前,如何检查是否能够访问资源?
这是我的代码的相关部分:
OUTPUT=`lftp -u $USER,$PASS -p $PORT $HOST <<HEREDOCUMENT
set ftp:ssl-allow no
mkdir $FTP_DIR
put $LOCAL_DIR/$LOCAL_FILE -o $FTP_DIR/$FTP_FILE
bye
HEREDOCUMENT`
答案1
正如评论中所建议的,您可以使用超时来防止进程卡住,例如:
OUTPUT=$(lftp -u $USER,$PASS -p $PORT $HOST <<EOF
set net:timeout 5
set net:max-retries 2
set net:reconnect-interval-base 5
set ftp:ssl-allow no
mkdir $FTP_DIR
put $LOCAL_DIR/$LOCAL_FILE -o $FTP_DIR/$FTP_FILE
bye
EOF)
@Marki在评论中提出了很好的建议:
对于较大的 FTP 脚本,您可以使用 Perl 或类似的语言,它允许您在每个命令之后执行明确的错误处理。