web-dev-qa-db-fra.com

gsettings: commande non trouvée

J'essaie de créer un script qui changera automatiquement le fond d'écran lorsqu'il sera exécuté.

#!/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"

Mais quand je fais ./change_wallpaper.sh je reçois correctement l'écho, mais alors

./change_wallpaper.sh: ligne 12: gsettings: commande non trouvée

Cependant, lorsque je lance la même commande depuis le terminal, il s'exécute correctement et le papier peint est en train de changer.

Quand je lance whereis gsettings il dit

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

Pourquoi affiche-t-on gsettings: command not found lorsque j'exécute à partir d'un script?

3
Saran Sankaran

Parce que vous changez la PATH dans votre script. Cette variable réservée est utilisée pour localiser les fichiers exécutables. Utilisez une autre variable.

Idem avec USER: il est également réservé et contient déjà l’utilisateur actuel, c’est-à-dire que vous n’avez pas besoin de définir USER=$(whoami).

En général, lors de la création de variables dans des scripts Shell, il est conseillé d'utiliser des noms en minuscules. Habituellement, les variables prédéfinies (telles que HOME, USER, PATH) sont toutes en MAJUSCULES. Un moyen simple d'éviter leur réécriture consiste à utiliser des noms minuscules dans vos propres scripts. Ou utilisez un préfixe, par exemple MY_PATH, MY_USER etc.

4
PerlDuck

Votre script ne fonctionnera pas pour tout le monde. La variable que vous avez définie pour la maison pour votre utilisateur sera incorrecte pour les personnes dont l'emplacement HOME est situé dans un endroit différent de /home/user. Par exemple, mon domicile pour mon espace personnel est /home/user/l/j/ljames.

Au lieu de définir le chemin sur "file:///home/$USER/.wallpaper/1920x1080", vous devez plutôt le modifier correctement en "file:///$HOME/.wallpaper/1920x1080". La variable $HOME est déjà étendue à l'espace d'accueil complet de l'utilisateur.

Votre script fonctionnera si avec ces modifications:

#!/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"

n exemple plus efficace est:

#!/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"

Les explications des lignes sont:

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