Podczas wget pojawia się błąd „Brak schematu”

14

Napisałem mały skrypt, który pobiera losową tapetę z interfejsu API Desktoppr i zmienia na nią tapetę pulpitu:

#!/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"

Po uruchomieniu skryptu ostatnie wgetpolecenie kończy się niepowodzeniem z błędem:

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

Kiedy wstawiam adres URL bezpośrednio do polecenia wget, tak:

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

... polecenie wykonuje się poprawnie i pobiera obraz, co oznacza, że ​​błąd występuje z powodu problemu w zmiennej.

Myślę, że może to mieć coś wspólnego z jqbiblioteką, której używam do analizowania odpowiedzi JSON z interfejsu API Desktoprr.

Hussain Khalil
źródło

Odpowiedzi:

22

Musisz usunąć podwójne cudzysłowy otaczające adres URL, na przykład za pomocą -ropcji 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')

Obecnie polecenie faktycznie powoduje

wget "\"http://a.desktopprassets.com/wallpapers/...jpg\""
Florian Diesch
źródło
Brawo. Ten problem zmusił mnie do zatrzaśnięcia klawiatury. Dzięki!
Hussain Khalil