web-dev-qa-db-ja.com

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と表示されるのはなぜですか?

3
Saran Sankaran

スクリプトのPATHを変更するため。この予約変数は、実行可能ファイルを見つけるために使用されます。別の変数を使用します。

USERと同じ:予約済みで、現在のユーザーが既に含まれています。つまり、USER=$(whoami)を設定する必要はありません。

一般に、シェルスクリプトで変数を作成するときは、小文字の名前を使用することをお勧めします。通常、事前定義された変数(HOMEUSERPATHなど)はすべて大文字であり、それらを上書きしないようにする簡単な方法は、独自のスクリプトで小文字の名前を使用することです。または、いくつかのプレフィックスを使用します。 MY_PATHMY_USERなど.

4
PerlDuck

スクリプトはすべてのユーザーに対して機能しません。ユーザーのホームに設定した変数は、/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.
4
L. D. James