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?
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.
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.