毎日の写真をダウンロードして背景画像として設定しようとしています:
#!/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 回しか実行されません。このセクションを機能させるには、毎回意味のない方法でスクリプトを変更しなければならなくなります。
何が原因なのでしょうか?
答え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}"