You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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类报错,你额外添加的自定义成功标记也可以作为快速判断依据

3. 精细化单命令状态判断

如果需要快速定位单条命令的执行结果,无需翻阅完整调试日志,可以在lftp内部命令后追加状态输出逻辑:

cd test/myfolder/ && echo "CD_EXEC_SUCCESS" || echo "CD_EXEC_FAILED: $?"

直接在日志中检索对应标记即可快速获取cd命令的执行结果。


内容的提问来源于stack exchange,提问作者Padfoot123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:54:08