wget
특정 웹사이트의 이미지를 처리하고 배경화면을 설정하는 스크립트(Nuno 작성)가 있습니다 . 하지만 wget
사이트에서 이미지를 가져올 수 있도록 수정할 수는 없는 것 같습니다 .크롬캐스트
소스의 이미지에는 다음과 같은 URL이 있습니다.영상
grep
욕심이 많아서 사용된 URL을 분리할 수 없는 것 같습니다 . 나는 grep -P
그것이 작동한다는 것을 깨달았습니다. 터미널에 수동으로 입력하면 작동합니다. 그런데 스크립트에서 변수를 할당하면 작동하지 않습니다. 를 사용하여 변수를 설정할 수 있지만 grep
을 사용하여 설정할 수는 없습니다 grep -P
.
#!/bin/bash
# * Name: earthwall.sh
# * Description: Downloads random image from earthview.withgoogle.com and sets as wallpaper on OSX
# * Author: Nuno Serro
# * Date: 09/07/2015 22:24:11 WEST
# * License: This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# * Copyright (c) 2015, Nuno Serro
#PID=$(pgrep gnome-session)
#PID=$(pgrep -f 'gnome-session' | head -n1)
#export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ)
mkdir -p ~/Pictures/globewall
cd ~/Pictures/globewall
# Get page index
wget -q https://clients3.google.com/cast/chromecast/home -O ~/Pictures/globewall/.index.html 2> /dev/null
if [ $? -ne 0 ]; then
echo "Failed to get index from google chromecast"
exit 1
fi
# Set image url, name and location
image_url=`cat ~/Pictures/globewall/.index.html | grep lh3.googleusercontent.com | grep -shoP 'https:[\\][\/][\\][\/]lh3(.*?)-mv' -m 1 -o | head -1 | sed 's/\\//g' | sed 's/u003d/=/g'`
image_name= wallpaper.jpg
# Get image
wget -q $image_url -O ~/Pictures/globewall/$image_name 2> /dev/null
if [ $? -ne 0 ]; then
echo "Failed to get image from www.googleusercontent.com"
exit 1
fi
# Change wallpaper
sleep 1
/usr/bin/gsettings set org.gnome.desktop.background picture-options 'zoom'
/usr/bin/gsettings set org.gnome.desktop.background picture-uri "file://~/Pictures/globewall/$image_name"
/usr/bin/gsettings set org.gnome.desktop.screensaver picture-uri "file://~/Pictures/globewall/$image_name"
echo "Wallpaper changed to $image_name"
exit 0
나는 붙어있다.
답변1
스크립트를 약간 수정해야 합니다.
이 줄 다음의 두 줄은 #Set image url, name and location
다양한 이유로 손상되었습니다(예: 잘못된 grep 구문, 잘못된 할당). 또한 스크립트는 파일 이름에 큰따옴표를 사용하지 않으므로 상황에 따라 스크립트가 손상될 수 있습니다.
보다 안정적으로 작동하도록 스크립트의 핵심을 다음과 같이 다시 작성했습니다.
#!/bin/bash
fn_basedir=~/Pictures/globewall/
fn_index='.index.html'
fn_image='wallpaper.jpg'
mkdir -p "$fn_basedir"
# Get page index
wget -q "https://clients3.google.com/cast/chromecast/home" -O "${fn_basedir}${fn_index}"
if [ $? -ne 0 ]; then
echo "Failed to get index from google chromecast"
exit 1
fi
# Set image url
image_url=$(grep -oP 'https:\\/\\/lh3(.*?)-mv' "${fn_basedir}${fn_index}" | sed -e 's/\\//g' -e 's/u003d/=/g' | head -1)
# Get image
wget -q "$image_url" -O "${fn_basedir}${fn_image}"
if [ $? -ne 0 ]; then
echo "Failed to get image from www.googleusercontent.com"
exit 1
fi
# Change wallpaper
sleep 1
/usr/bin/gsettings set org.gnome.desktop.background picture-options 'zoom'
/usr/bin/gsettings set org.gnome.desktop.background picture-uri "file://${fn_basedir}${fn_image}"
/usr/bin/gsettings set org.gnome.desktop.screensaver picture-uri "file://${fn_basedir}${fn_image}"
echo "Wallpaper changed to ${fn_image}"
exit 0
그런데, 멋진 사진이군요!