我正在尝试编写 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 或类似的语言,它允许您在每个命令之后执行明确的错误处理。