使用bash变量传入HTTPS链接时feh报错‘链接不存在’
解决feh提示图片链接不存在的问题
你遇到的核心问题是用cut命令解析JSON返回值时,拿到的image变量包含了多余字符(比如双引号、换行或无效符号),再加上请求API时用了错误的HTTP头,导致返回内容不符合预期,最终feh把带冗余字符的字符串当成本地文件路径,自然提示“不存在”。
问题根源拆解
waifu.pics的API返回的是JSON格式,但你设置了Accept: application/xml和Content-Type: application/xml头,这会让API返回非预期的内容格式;- 用
cut这种纯文本切割工具处理JSON非常不可靠,很容易把URL和JSON的引号、括号混在一起,比如最终拿到的image可能是"https://xxx.png"(带双引号),feh会把这个带引号的字符串当成本地文件名,自然找不到。
修复后的脚本
先确保系统安装了jq(大多数发行版可用apt install jq或yum install jq安装),然后替换成以下脚本:
for line in $(cat ~/bin/img-num.txt) do sleep 0.1 X=$(shuf -i 1-2100 -n 1) Y=$(shuf -i 1-1100 -n 1) # 去掉错误的XML头,用jq精准解析JSON提取纯净URL image=$(curl -s -X GET https://api.waifu.pics/sfw/waifu | jq -r '.url') feh -g 500x500+$X+$Y --scale-down "$image" & done
关键优化点
- 移除了错误的XML请求头,让API返回标准JSON格式;
- 用
jq -r '.url'提取URL,-r参数确保输出不带双引号的纯净字符串; curl加-s参数屏蔽进度条等冗余输出,避免干扰变量赋值。
你可以先手动执行curl -s https://api.waifu.pics/sfw/waifu | jq -r '.url',把输出结果赋值给image后再运行feh命令,就能验证修复效果。
内容的提问来源于stack exchange,提问作者Allusive
相关产品推荐
相关产品推荐

