我写了一个小猛击脚本使文件夹中的图像成为壁纸:
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 脚本从互联网设置壁纸?
答案1
您需要以“完成”来结束它,例如:
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秒更换一次壁纸。
答案2
在 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/{} \;
谢谢致 Gilles提醒我$PWD
。
答案3
添加最后一行:done
。
还,加上双引号$f
,以防某些文件名包含空格。
因此,整个脚本变成:
for f in *.jpg
do
gsettings set org.gnome.desktop.background picture-uri "file:$f"
done
答案4
首先,基本的 bash 语法: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