Я написал небольшой скрипт 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?
В bash вы заканчиваете for блоки с помощью done, например:
for f in *.jpg
do
gsettings set org.gnome.desktop.background picture-uri "file:$f"
done
Кроме того, добавьте двойные кавычки вокруг $f, если некоторые имена файлов содержат пробелы.
Обратите внимание, что я думаю, что с помощью 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/{} \;
Спасибо поместите двойные кавычки вокруг $f , чтобы напомнить мне о [ f9].
Добавьте последнюю строку: done.
Также добавьте двойные кавычки вокруг $f, если некоторые имена файлов содержат пробелы.
Таким образом, весь скрипт становится :
for f in *.jpg
do
gsettings set org.gnome.desktop.background picture-uri "file:$f"
done
Сначала базовый синтаксис bash: цикл for заканчивается зарезервированным словом done.
for f in *.jpg
do
gsettings set org.gnome.desktop.background picture-uri file:$f
done
Кроме того $f - относительный путь - это имя файла в текущем каталоге , Но, как заметил Фейрай, имя файла не будет значимым из контекста. Вам необходимо предоставить абсолютный путь. Вы можете сделать это легко с переменной PWD, которая всегда содержит путь к текущему каталогу. Обратите внимание, что для URL file:// требуется два слэша для индикатора :// плюс косая черта для корневого каталога, который запускает путь, к которому относится $PWD.
for f in *.jpg
do
gsettings set org.gnome.desktop.background picture-uri file://$PWD/$f
done
Это еще не все. Если какое-либо имя файла содержит пробел, ваш скрипт не будет работать. Чтобы избежать этой ловушки, feyray заметил (всегда ставьте двойные кавычки вокруг переменных подстановок).
for f in *.jpg
do
gsettings set org.gnome.desktop.background picture-uri "file://$PWD/$f"
done