gsettings: comando não encontrado

3

Estou tentando criar um script, que mudará o papel de parede automaticamente quando executado.

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

Mas quando eu faço ./change_wallpaper.sh eu recebo o eco corretamente, mas então

./change_wallpaper.sh: line 12: gsettings: command not found

No entanto, quando eu executo o mesmo comando do terminal, ele executa bem e o papel de parede está sendo alterado.

Quando executo whereis gsettings , ele informa

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

Por que está mostrando gsettings: command not found quando executo o script?

    
por Saran Sankaran 08.04.2018 / 10:11

2 respostas

4

Porque você altera o PATH no seu script. Essa variável reservada é usada para localizar arquivos executáveis. Use outra variável.

Mesmo com USER : também é reservado e já contém o usuário atual, ou seja, você não precisa definir USER=$(whoami) .

Em geral, ao criar variáveis em scripts de shell, é uma boa ideia usar nomes em letras minúsculas. Geralmente, as variáveis predefinidas (como HOME , USER , PATH ) são todas maiúsculas e uma maneira simples de evitar sobrescrevê-las é usar nomes minúsculos nos próprios scripts. Ou use algum prefixo, por exemplo MY_PATH , MY_USER etc.

    
por PerlDuck 08.04.2018 / 11:13
4

Seu script não funcionará para todos. A variável que você define para seu usuário para o usuário será incorreta para as pessoas que têm o local HOME em um local diferente de /home/user . Por exemplo, meu local de residência para meu espaço pessoal é /home/user/l/j/ljames .

Em vez de definir o caminho como "file:///home/$USER/.wallpaper/1920x1080" , você deve alterá-lo corretamente para "file:///$HOME/.wallpaper/1920x1080" . A variável $HOME já está expandida para o espaço principal completo do usuário.

Seu script funcionará se com estas alterações:

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

Um exemplo mais eficiente é:

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

A explicação das linhas é:

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.
    
por L. D. James 08.04.2018 / 12:22