Ich versuche, ein Tagesbild herunterzuladen und es mit folgendem als Hintergrundbild festzulegen:
#!/bin/bash
# clear cache
PICS="/home/pvlkmrv/Pictures"
rm -f ${PICS}/wall.jpg
rm -f ${PICS}/photo-of-the-day
# download photo-of-the-day page
wget http://photography.nationalgeographic.com/photography/photo-of-the-day -O ${PICS}/photo-of-the-day
# parse the url out from the file
url=`cat ${PICS}/photo-of-the-day | grep 'images.nationalgeographic.com.*cache.*990x742.jpg' | cut -d '"' -f 2`
# download the photo
wget http:$url -O ${PICS}/wall.jpg
# set the desktop background
URI=file:///${PICS}/wall.jpg
echo ${URI}
gsettings set org.gnome.desktop.background picture-options 'centered'
gsettings set org.gnome.desktop.background picture-uri ${URI}
Das Bild wird wie erwartet heruntergeladen, aber der Hintergrund ist nicht wirklich festgelegt. Seltsamerweise funktioniert es, wenn ich URI ändere, um mehr oder weniger Schrägstriche einzuschließen, aber das passiert nur einmal. Ich muss das Skript jedes Mal auf eine Weise ändern, die eigentlich sinnlos wäre, damit dieser Abschnitt funktioniert.
Was könnte die Ursache dafür sein?
Antwort1
Versuchen Sie es folgendermaßen:
#!/bin/bash
# clear cache
PICS="/home/pvlkmrv/Pictures"
rm -f "${PICS}/wall.jpg"
rm -f "${PICS}/photo-of-the-day"
# download photo-of-the-day page
wget "http://photography.nationalgeographic.com/photography/photo-of-the-day" -O "${PICS}/photo-of-the-day"
# parse the url out from the file
url="`cat ${PICS}/photo-of-the-day | grep 'images.nationalgeographic.com.*cache.*990x742.jpg' | cut -d '\"' -f 2`"
# download the photo
wget "http:$url" -O "${PICS}/wall.jpg"
# set the desktop background
# only two slashes here, because the PICS var already has a leading slash
URI="file://${PICS}/wall.jpg"
echo ${URI}
gsettings set org.gnome.desktop.background picture-options 'centered'
gsettings set org.gnome.desktop.background picture-uri "${URI}"
Antwort2
Sie können entweder die vollständige URI
Variable in Anführungszeichen setzen, wie cmks gezeigt hat, oder sicherstellen, dass file://
und wall.jpg
in Anführungszeichen gesetzt werden, wie folgt:
URI="file:///"${PICS}"/wall.jpg"
Hier ist eine kleine Verbesserung Ihres Skripts. Variablen werden verwendet, um die Befehlszeile zu verkürzen. Die Datei wird in gespeichert /tmp
, das bei jedem Neustart des Systems gelöscht wird, sodass Sie den Cache nicht manuell leeren müssen. AWK wird verwendet, um das Parsen zu verbessern und die Pipe-Aufgabe zu verringern. wget
schreibt direkt in AWK, um das Speichern zusätzlicher Dateien zu vermeiden
#!/bin/bash
# set variables to shorten lines
FILE="/tmp/photo_of_the_day"
PAGE="http://photography.nationalgeographic.com/photography/photo-of-the-day"
SEARCH="images.nationalgeographic.com.*cache.*990x742.jpg"
# get image URI directly
IMAGE=$(wget "$PAGE" -O - -o /dev/null | awk -F'"' -v regex="$SEARCH" '$0~ regex {print $2}')
# download the photo
wget http:$IMAGE -O "$FILE"
# set the desktop background
URI="file:///$FILE"
echo ${URI}
gsettings set org.gnome.desktop.background picture-options 'centered'
gsettings set org.gnome.desktop.background picture-uri "${URI}"
Antwort3
Ich glaube, ich habe das Problem gefunden: Selbst wenn ich zur Datei gehe, mit der rechten Maustaste klicke und „Als Hintergrundbild festlegen ...“ sage, passiert nichts. Ich habe also angenommen, dass es daran liegt, dass sich der Dateiname nicht jedes Mal ändert; Linux hat eine Art kostensparende Funktion, die ich eigentlich nicht aktualisieren muss, weil es dasselbe Bild ist. Um das System zu zwingen, jedes Mal zu erkennen, dass es sich um ein neues Bild handelt, variieren Sie den Dateinamen wie folgt:
#!/bin/bash
# clear cache
PICS="/home/pvlkmrv/Pictures"
RAND=$RANDOM
rm -f ${PICS}/*.jpg
rm -f ${PICS}/photo-of-the-day
# download photo-of-the-day page
wget http://photography.nationalgeographic.com/photography/photo-of-the-day -O ${PICS}/photo-of-the-day
# parse the url out from the file
url=`cat ${PICS}/photo-of-the-day | grep 'images.nationalgeographic.com.*cache.*990x742.jpg' | cut -d '"' -f 2`
# download the photo
wget http:$url -O ${PICS}/wall${RAND}.jpg
# set the desktop background
URI="file://${PICS}/wall${RAND}.jpg"
echo ${URI}
gsettings set org.gnome.desktop.background picture-options 'centered'
gsettings set org.gnome.desktop.background picture-uri "${URI}"