为什么这个 Bash 脚本不起作用?

Bha*_*rat 2 bash scripts

我写了一个小的Bash脚本,使文件夹中的图像成为墙纸:

for f in *.jpg
do 
    gsettings set org.gnome.desktop.background picture-uri file:$f
Run Code Online (Sandbox Code Playgroud)

错误是:

./wall.sh: line 6: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)

我的代码错了吗?有没有办法使用 Bash 脚本从 Internet 设置壁纸?

blk*_*pws 7

您需要以“完成”结束它,例如:

for f in *.jpg
do 
    gsettings set org.gnome.desktop.background picture-uri "file:$f"
done
Run Code Online (Sandbox Code Playgroud)

但我认为最好的方法是这样的:

for f in /path/to/dir/*.jpg
do
    gsettings set org.gnome.desktop.background picture-uri "file://$f"
done
Run Code Online (Sandbox Code Playgroud)

好的,我编辑了第二个代码。试试这个。

如果你想从网上随机获取壁纸,可以执行以下代码:

#!/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
Run Code Online (Sandbox Code Playgroud)

此脚本将每 60 秒更改一次壁纸。


Set*_*eth 5

在 bash 中,for块以结束done,如下所示:

for f in *.jpg
do 
    gsettings set org.gnome.desktop.background picture-uri "file:$f"
done  
Run Code Online (Sandbox Code Playgroud)

另外,在 周围加上双引号$f,以防某些文件名包含空格。

请注意,我认为您可以通过以下方式更轻松地实现您想要实现的目标find

find $imageDir -maxdepth 1 -type f -name "*.jpg" -exec gsettings set org.gnome.desktop.background picture-uri file:{} \;  
Run Code Online (Sandbox Code Playgroud)

替换$imageDir为您要搜索的文件夹的路径。或者,如果你想在本地目录中运行命令,你可以这样做:

find -maxdepth 1 -type f -name "*.jpg" -exec gsettings set org.gnome.desktop.background picture-uri file:$PWD/{} \;   
Run Code Online (Sandbox Code Playgroud)

感谢Gilles提醒我关于$PWD.