使用 wget 时出现“Scheme missing”错误

使用 wget 时出现“Scheme missing”错误

我写了一个小脚本,从桌面版API 并将我的桌面壁纸更改为它:

#!/bin/bash
url=$(curl 'https://api.desktoppr.co/1/wallpapers?page='$(shuf -i 1-1000 -n 1) | jq ".response[].image.url" | sed $(shuf -i 1-20 -n 1)'!d') &&
wget "$url"

当我运行脚本时,最后一个wget命令失败并出现错误:

"http://a.desktopprassets.com/wallpapers/...jpg": Scheme missing.

当我将 URL 直接放入 wget 命令时,如下所示:

wget "http://a.desktopprassets.com/wallpapers/...jpg"

...命令正确执行并下载图像,这意味着错误是由于变量中存在某些问题而发生的。

我认为这可能与jq我用来解析来自 Desktoprr API 的 JSON 响应的库。

答案1

您需要删除 URL 周围的双引号,例如使用-r以下选项jq

url=$(curl 'https://api.desktoppr.co/1/wallpapers?page='$(shuf -i 1-1000 -n 1) | jq -r ".response[].image.url" | sed $(shuf -i 1-20 -n 1)'!d')

目前该命令实际上导致

wget "\"http://a.desktopprassets.com/wallpapers/...jpg\""

答案2

我遇到过类似的问题。

这将返回方案缺失错误:

resources=$(cat complete_list_of_urls.txt)
for resource in ${resources[@]};
do
    wget --no-check-certificate https://cyberican.com/images/images/$resource
done

通过删除(“)引号,我可以提取数据。

resources=$(cat complete_list_of_urls.txt | tr -d '\"')
for resource in ${resources[@]};
do
    wget --no-check-certificate https://cyberican.com/images/images/$resource
done

我希望这能帮助任何遇到同样问题的人:-)

相关内容