gsettings:未找到命令

gsettings:未找到命令

我正在尝试创建一个脚本,它将在运行时自动更改壁纸。

#!/bin/bash

cd ~/
rm -r ~/.wallpaper
mkdir .wallpaper
cd ~/.wallpaper

wget https://source.unsplash.com/random/1920x1080
USER=$(whoami)
PATH="file:///home/$USER/.wallpaper/1920x1080"
echo $PATH
gsettings set org.gnome.desktop.background picture-uri "$PATH"

但当我这样做时,./change_wallpaper.sh我得到了正确的回声,但是

./change_wallpaper.sh:第 12 行:gsettings:未找到命令

但是,当我从终端运行相同的命令时,它可以正常执行并且壁纸会发生变化。

当我运行时whereis gsettings它告诉

gsettings:/usr/bin/gsettings /usr/share/man/man1/gsettings.1.gz

为什么gsettings: command not found当我从脚本执行时会显示它?

答案1

你的脚本并不适合所有人。HOME对于与 不同位置的 用户,您为用户设置的 home 变量是不正确的/home/user。例如,我的个人空间的 home 位置是/home/user/l/j/ljames

您不应该将路径设置为 ,而"file:///home/$USER/.wallpaper/1920x1080"应该将其更改为"file:///$HOME/.wallpaper/1920x1080"。该变量$HOME已经扩展到用户的完整主空间。

经过以下更改后,您的脚本将可以运行:

#!/bin/bash

cd ~/
rm -r ~/.wallpaper
mkdir .wallpaper
cd ~/.wallpaper

wget https://source.unsplash.com/random/1920x1080
# USER=$(whoami) This line isn't neccesary.)    
path="file:///$HOME/.wallpaper/1920x1080"
echo $path
gsettings set org.gnome.desktop.background picture-uri "$path"

一个更有效的例子是:

#!/bin/bash

[ ! -d ~/.wallpaper ] && mkdir ~/.wallpaper
cd ~/.wallpaper
wget -O 1920x1080 https://source.unsplash.com/random/
path="file:///$HOME/.wallpaper/1920x1080"
rm ~/.cache/wallpaper/*
gsettings set org.gnome.desktop.background picture-uri "$path"

这些线条的解释如下:

Line #1:  Create wallpaper directory if it doesn't exist.
Line #2:  Move to the folder.
Line #3:  Overwrite the current file with the new wallpaper.
Line #4:  Set the pathname variable.
Line #5:  Removed the Wallpaper cache for image change detection.
Line #6:  Active the new wallpaper.

答案2

因为您在脚本中更改了PATH。此保留变量用于定位可执行文件。请使用另一个变量。

同理USER:也是保留的,已经包含了当前用户,即不需要设置USER=$(whoami)

一般来说,在 shell 脚本中创建变量时,最好使用小写名称。通常,预定义变量(如HOMEUSERPATH)都是大写的,避免覆盖它们的一个简单方法是在自己的脚本中使用小写名称。或者使用一些前缀,例如MY_PATHMY_USER等。

相关内容