我正在尝试创建一个脚本,它会在运行时自动更改壁纸。
#!/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
我从脚本执行时显示?
您的脚本不适用于所有人。 您为用户设置的 home 变量对于
HOME
位置与/home/user
. 例如,我个人空间的家庭位置是/home/user/l/j/ljames
.而不是将路径设置为,
"file:///home/$USER/.wallpaper/1920x1080"
您应该更正确地将其更改为"file:///$HOME/.wallpaper/1920x1080"
. 该变量$HOME
已经扩展到用户的完整家庭空间。如果进行以下更改,您的脚本将起作用:
一个更有效的例子是:
行的解释是:
因为你改变了
PATH
你的脚本。此保留变量用于定位可执行文件。使用另一个变量。与 相同
USER
:它也被保留并且已经包含当前用户,即您不需要设置USER=$(whoami)
。通常,在 shell 脚本中创建变量时,最好使用小写名称。通常,预定义变量(如
HOME
,USER
,PATH
)都是大写的,避免覆盖它们的简单方法是在自己的脚本中使用小写名称。或者使用一些前缀,例如MY_PATH
,MY_USER
等等。