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

Shell新手求助:如何将wget的JSON响应存入变量

如何将wget获取的JSON响应存入shell变量并提取指定字段?

一、解决wget权限错误的核心问题

你遇到的Permission denied是因为wget默认会尝试把HTTP响应保存为URL中指定的文件名(即带长查询参数的auth.cgi?api=SYNO.API.Auth&...),但当前工作目录没有写入权限。只需让wget把响应输出到标准输出(而非文件)即可解决:

# 用wget获取响应并直接输出到stdout,不创建文件
response=$(wget -qO- "http://192.168.1.100:5000/webapi/auth.cgi?api=SYNO.API.Auth&method=Login&version=3&account=USER&passwd=PASSWD&session=SurveillanceStation&format=sid")

参数说明:

  • -q:安静模式,关闭wget的日志输出
  • -O-:将响应内容输出到标准输出(-代表stdout)

如果习惯用curl,也可以用更简洁的写法:

response=$(curl -s "http://192.168.1.100:5000/webapi/auth.cgi?api=SYNO.API.Auth&method=Login&version=3&account=USER&passwd=PASSWD&session=SurveillanceStation&format=sid")

-s:安静模式,隐藏curl的进度信息

二、提取JSON中的success和sid字段

要解析JSON,推荐使用jq工具(大部分Linux发行版可通过包管理器安装,比如apt install jq或yum install jq)。

  1. 提取success状态:
success=$(echo "$response" | jq -r '.success')

-r:输出原始字符串(不带JSON字符串的引号)

  1. 提取sid值:
sid=$(echo "$response" | jq -r '.data.sid')

三、完整逻辑示例

# 获取响应
response=$(wget -qO- "http://192.168.1.100:5000/webapi/auth.cgi?api=SYNO.API.Auth&method=Login&version=3&account=USER&passwd=PASSWD&session=SurveillanceStation&format=sid")

# 提取字段
success=$(echo "$response" | jq -r '.success')
sid=$(echo "$response" | jq -r '.data.sid')

# 验证并使用
if [ "$success" = "true" ]; then
    echo "登录成功,SID: $sid"
    # 这里可以添加使用sid的后续操作
else
    echo "登录失败,请检查账号密码或API参数"
fi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:12:32