Я записал маленький сценарий Bash так, чтобы изображение в папке стало обоями:
for f in *.jpg
do
gsettings set org.gnome.desktop.background picture-uri file:$f
Ошибка:
./wall.sh: line 6: syntax error: unexpected end of file
Мой код неправильно? И есть ли способ установить обои из Интернета с помощью сценария Bash?
Необходимо закончить его "сделанным", как:
for f in *.jpg
do
gsettings set org.gnome.desktop.background picture-uri "file:$f"
done
, Но я думаю, что лучший способ сделать это похож на это:
for f in /path/to/dir/*.jpg
do
gsettings set org.gnome.desktop.background picture-uri "file://$f"
done
Хорошо, я отредактировал второй код. Попробуйте этим.
, Если Вы хотите получить случайные обои от Интернета, можно выполнить этот код:
#!/bin/bash
while true
do
img=http://www.wallpaperup.com/wallpapers/download/$RANDOM/1920/1080
wget -O /tmp/1080.jpg $img
gsettings set org.gnome.desktop.background picture-uri "file:///tmp/1080.jpg"
sleep 60
done
Этот сценарий будет изменять обои каждые 60 секунд.
В ударе Вы заканчиваете for
блоки done
, как так:
for f in *.jpg
do
gsettings set org.gnome.desktop.background picture-uri "file:$f"
done
кроме того, помещенные двойные кавычки [приблизительно 115] , в случае, если некоторые имена файлов содержат пробелы.
Примечание, что я думаю, чего Вы пытаетесь достигнуть, могло быть сделано легче с find
:
find $imageDir -maxdepth 1 -type f -name "*.jpg" -exec gsettings set org.gnome.desktop.background picture-uri file:{} \;
Замена $imageDir
с путем к папке Вы хотите искать. Или, если Вы хотите выполнить команду в локальном каталоге, можно сделать это как это:
find -maxdepth 1 -type f -name "*.jpg" -exec gsettings set org.gnome.desktop.background picture-uri file:$PWD/{} \;
Спасибо к Gilles для напоминания мне [приблизительно 118].
Добавьте последнюю строку: done
.
кроме того, помещенные двойные кавычки [приблизительно 112] , в случае, если некоторые имена файлов содержат пробелы.
Таким образом, целый сценарий становится:
for f in *.jpg
do
gsettings set org.gnome.desktop.background picture-uri "file:$f"
done
Во-первых, основной синтаксис удара: a for
цикл заканчивается зарезервированным словом done
.
for f in *.jpg
do
gsettings set org.gnome.desktop.background picture-uri file:$f
done
Кроме того, $f
относительный путь — это - имя файла в текущем каталоге. Но поскольку feyray отметил, что имя файла не будет значимо из контекста. Необходимо обеспечить полный путь. Можно сделать это легко с PWD
переменная, которая всегда содержит путь к текущему каталогу. Отметьте это file://
URL требуют двух наклонных черт для ://
индикатор плюс наклонная черта для корневого каталога, который запускает путь, который $PWD
включает.
for f in *.jpg
do
gsettings set org.gnome.desktop.background picture-uri file://$PWD/$f
done
Это не все. Если какое-либо имя файла будет содержать пространство, то Ваш сценарий не будет работать. Для предотвращения этой ловушки поместите двойные кавычки вокруг подстановок переменных (всегда помещаемые двойные кавычки вокруг подстановок переменных).
for f in *.jpg
do
gsettings set org.gnome.desktop.background picture-uri "file://$PWD/$f"
done