shell脚本执行SFTP操作时如何查看lftp状态及命令执行输出
解决方案
你可以通过开启lftp调试输出、重定向日志、捕获退出码的方式实现需求,具体操作如下:
1. 完整修改版脚本示例
host=testurl.url.com user=username pass=pass # 定义带时间戳的日志文件路径,避免覆盖历史日志 LOG_FILE="./lftp_sftp_$(date +%Y%m%d_%H%M%S).log" # 执行lftp操作,将标准输出、标准错误全部写入日志文件 # -d 参数开启调试模式,输出完整交互信息 lftp -d <<EOF > "$LOG_FILE" 2>&1 open sftp://${host} user ${user} ${pass} # 也可在lftp内部设置调试级别,数值1-9可选,数值越大输出越详细 set debug 3 cd test/myfolder/ # 手动添加自定义成功标记,方便后续快速检索日志 echo "CD command executed successfully" bye EOF # 捕获lftp命令的整体退出状态码 LFTP_EXIT_CODE=$? if [ $LFTP_EXIT_CODE -eq 0 ]; then echo "lftp 任务执行完成,退出码为0,详情查看日志:$LOG_FILE" else echo "lftp 任务执行失败,退出码为$LFTP_EXIT_CODE,详情查看日志:$LOG_FILE" # 可在此处添加自定义失败告警逻辑 fi
2. 结果判断方法
- 整体执行状态:通过脚本末尾捕获的
LFTP_EXIT_CODE判断,0代表所有命令全部执行成功,非0代表至少存在一处执行异常 - 日志内容判断:
- 连接状态:日志内会打印完整的SFTP连接、鉴权交互信息,出现
Login successful类提示即为连接鉴权成功;出现Connection refused、Permission denied等报错即为连接、端口或账号密码异常 - cd命令执行结果:目标路径不存在时日志会输出
cd: No such file or directory类报错,你额外添加的自定义成功标记也可以作为快速判断依据
- 连接状态:日志内会打印完整的SFTP连接、鉴权交互信息,出现
3. 精细化单命令状态判断
如果需要快速定位单条命令的执行结果,无需翻阅完整调试日志,可以在lftp内部命令后追加状态输出逻辑:
cd test/myfolder/ && echo "CD_EXEC_SUCCESS" || echo "CD_EXEC_FAILED: $?"
直接在日志中检索对应标记即可快速获取cd命令的执行结果。
内容的提问来源于stack exchange,提问作者Padfoot123
相关产品推荐
相关产品推荐

