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

为什么这个 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 脚本从互联网设置壁纸?

答案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

相关内容