Я пытаюсь загрузить ежедневное изображение и установить его в качестве фонового изображения с помощью:
#!/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}
Изображение загружается так, как и ожидалось, но фон фактически не устанавливается. Странно, но это работает, если я изменяю URI, чтобы включить больше или меньше прямых слешей, но это происходит только один раз. В итоге мне приходится изменять скрипт, который должен быть бессмысленным, каждый раз, чтобы заставить этот раздел работать.
Что может быть причиной этого?
решение1
попробуйте так:
#!/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}"
решение2
Вы можете либо заключить в кавычки всю URI
переменную, как показано в cmks, либо убедиться, что file://
и wall.jpg
заключены в кавычки, например так:
URI="file:///"${PICS}"/wall.jpg"
Вот небольшое улучшение вашего скрипта. Переменные используются для сокращения командной строки. Файл сохраняется в /tmp
, который удаляется каждый раз при перезапуске системы, поэтому вам не нужно вручную очищать кэш. AWK используется для улучшения разбора и уменьшения конвейеризации. wget
напрямую пишет в AWK, чтобы избежать сохранения дополнительных файлов
#!/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}"
решение3
Кажется, я нашел проблему: даже если я перехожу к файлу, щелкаю правой кнопкой мыши и говорю "Установить как обои...", ничего не происходит. Поэтому я предположил, что это тот факт, что имя файла не меняется каждый раз; в Linux есть какая-то функция экономии средств "я-на-самом-деле-не-собираюсь-обновлять-потому-что-это-то-же-изображение". Чтобы заставить систему распознавать, что это каждый раз новая картинка, измените имя файла следующим образом:
#!/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}"