다음을 사용하여 일일 사진을 다운로드하고 배경 이미지로 설정하려고 합니다.
#!/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}"