$HOME não existe (clickbait) [RESOLVIDO]

1. $HOME não existe (clickbait) [RESOLVIDO]

Talisson Alves de Paula
talisson205

(usa Linux Mint)

Enviado em 04/08/2021 - 02:26h

Olá, como vai?

Acontece que não havia pensado no pequeno detalhe que se segue:

1 function GetPictures() {
2 local gallery=$1
3 if [[ $(ls $gallery) =~ .*[.](png|jpg) ]]; then
4 echo ${BASH_REMATCH[@]}
5 fi
6 }
7
8 function GetGallery() {
9 if ! [[ -e ${HOME}/.config/user-dirs.dirs ]]; then
10 Exeption 1
11 else
12 cat ${HOME}/.config/user-dirs.dirs | \
13 grep --color=never "XDG_PICTURES_DIR=" | \
14 cut -f2 -d=
15 fi
16 }
17
18 function SetWallpaper() {
19 local pictures=("$(GetPictures $(GetGallery))")
20 if [[ ${#pictures[@]} -ne 0 ]]; then
21 feh --bg-fill "$(getGallery)/${pictures[0]}"
22 fi
23 }

Estou adaptando um de meus scripts cujos blocos acima tem como função, meramente, definir o plano de fundo para máquina. O problema e que a função GetGallery (L3) retorna uma string e não um path, oque resulta em...
ls: não foi possível acessar '"$HOME/Imagens"': Arquivo ou diretório inexistente
.
Não sei muito bem como resolver esse problema sem ter que refazer grande parte do código. Adoraria receber algumas sugestões.
P.S. Não sei se todo o resto do código funciona. Modifiquei bastante o original e esse pode ser apenas um dos erros de lógica : ]


  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 04/08/2021 - 03:47h


talisson205 escreveu:

Olá, como vai?

Acontece que não havia pensado no pequeno detalhe que se segue:

1 function GetPictures() {
2 local gallery=$1
3 if [[ $(ls $gallery) =~ .*[.](png|jpg) ]]; then
4 echo ${BASH_REMATCH[@]}
5 fi
6 }
7
8 function GetGallery() {
9 if ! [[ -e ${HOME}/.config/user-dirs.dirs ]]; then
10 Exeption 1
11 else
12 cat ${HOME}/.config/user-dirs.dirs | \
13 grep --color=never "XDG_PICTURES_DIR=" | \
14 cut -f2 -d=
15 fi
16 }
17
18 function SetWallpaper() {
19 local pictures=("$(GetPictures $(GetGallery))")
20 if [[ ${#pictures[@]} -ne 0 ]]; then
21 feh --bg-fill "$(getGallery)/${pictures[0]}"
22 fi
23 }

Estou adaptando um de meus scripts cujos blocos acima tem como função, meramente, definir o plano de fundo para máquina. O problema e que a função GetGallery (L3) retorna uma string e não um path, oque resulta em...
ls: não foi possível acessar '"$HOME/Imagens"': Arquivo ou diretório inexistente
.
Não sei muito bem como resolver esse problema sem ter que refazer grande parte do código. Adoraria receber algumas sugestões.
P.S. Não sei se todo o resto do código funciona. Modifiquei bastante o original e esse pode ser apenas um dos erros de lógica : ]

Bom dia.
Segue:
awk -F"=" '/XDG_PICTURES_DIR/ {system("echo "$2)}' ${HOME}/.config/user-dirs.dirs 

O comando acima, casa a linha com "XDG_PICTURES_DIR/",
pega o campo 2, e da um echo para resolver a var "$HOME"
--------------------------------------------------------------------------------
Faz "o mesmo" que:
cat ${HOME}/.config/user-dirs.dirs | \
grep --color=never "XDG_PICTURES_DIR=" | \
cut -f2 -d=
resolve a var, e gera a variável IMAGENS.
--------------------------------------------------------------------------------
Sugestão:
function GetGallery() {
[[ -e ${HOME}/.config/user-dirs.dirs ]] && IMAGENS=$(awk -F"=" '/XDG_PICTURES_DIR/ {system("echo "$2)}' ${HOME}/.config/user-dirs.dirs)
}

______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________
Nota de esclarecimento:
O comando: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p',
faz parte da minha assinatura.
O qual, "filtra" a página: "https://www.vivaolinux.com.br/termos-de-uso/",
Mostrando o seguinte:

Se você sanou sua dúvida ou resolveu um problema a partir de um
tópico criado, é extremamente recomendável que acesse o tópico e
marque-o como "RESOLVIDO". E mais recomendável ainda que você eleja
como melhor resposta a que mais lhe ajudou.


______________________________________________________________________


3. Obrigado Msoliver

Talisson Alves de Paula
talisson205

(usa Linux Mint)

Enviado em 04/08/2021 - 12:26h

Lindo esse seu resumo de minhas 3 linhas em apenas 1
Ficou assim:

function GetPictures() {
local gallery=$1
if [[ $(ls $gallery) =~ .*[.](png|jpg) ]]; then
echo ${BASH_REMATCH[@]}
fi
}

function GetGallery() {
if [[ -e ${HOME}/.config/user-dirs.dirs ]]; then
awk -F"=" '/XDG_PICTURES_DIR/ {system("echo "$2)}' $HOME/.config/user-dirs.dirs
fi

}

function SetWallpaper() {
local pictures=($(GetPictures $(GetGallery)))
if [[ ${#pictures[@]} -ne 0 ]]; then
feh --bg-fill "$(GetGallery)/${pictures[0]}"
fi
}


Tem um pequeno Bug: Quando o nome dos arquivos em Imagens possui espaços, a estrutura do array não fica como desejado. Vou parcialmente tratar a exceção mas o "defeito" continuará.

Voz na minha cabeça: Dá para escrever algo para randomizar os planos de fundo... Hehe boy


4. Re: $HOME não existe (clickbait) [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 04/08/2021 - 17:32h


talisson205 escreveu:

Lindo esse seu resumo de minhas 3 linhas em apenas 1
Ficou assim:

function GetPictures() {
local gallery=$1
if [[ $(ls $gallery) =~ .*[.](png|jpg) ]]; then
echo ${BASH_REMATCH[@]}
fi
}

function GetGallery() {
if [[ -e ${HOME}/.config/user-dirs.dirs ]]; then
awk -F"=" '/XDG_PICTURES_DIR/ {system("echo "$2)}' $HOME/.config/user-dirs.dirs
fi

}

function SetWallpaper() {
local pictures=($(GetPictures $(GetGallery)))
if [[ ${#pictures[@]} -ne 0 ]]; then
feh --bg-fill "$(GetGallery)/${pictures[0]}"
fi
}


Tem um pequeno Bug: Quando o nome dos arquivos em Imagens possui espaços, a estrutura do array não fica como desejado. Vou parcialmente tratar a exceção mas o "defeito" continuará.

Voz na minha cabeça: Dá para escrever algo para randomizar os planos de fundo... Hehe boy

------------------------------------------------------------------------------------------------------------------------------------
Boa tarde talisson,
O velho problema do espaço em nomes de arquivos.....
Veja o exemplo:
ls -1 Imagens/
img_01.jpeg
img_02.png
img_03.png
'img 04.png'
img_05.png
img_06.jpg
IFS="|" read -a imgs <<< $(ls -1 Imagens/|paste -sd'|')
echo ${#imgs[@]}
6
printf "%s\n" "${imgs[@]}"
img_01.jpeg
img_02.png
img_03.png
img 04.png
img_05.png
img_06.jpg

Para acessar o arquivo com espaço no nome, escape o espaço:
printf "%s\n" "${imgs[@]// /\\ }"
img_01.jpeg
img_02.png
img_03.png
img\ 04.png
img_05.png
img_06.jpg

-----------------------------------------------------------------------------------------------------------------
Voz na minha cabeça:
Dá para escrever algo para randomizar os planos de fundo... Hehe boy

Sim, use a var $RANDOM
Usando o exemplo da matriz "imgs" que postei acima:
ls "Imagens/${imgs[$(($RANDOM%${#imgs[@]}))]}"
$(($RANDOM%${#imgs[@]})) => Retora um numero de 0 a 5, pois, o valor de ${#imgs[@]}, é 6
------------------------------------------------------------------------------------------------------------------------------
Neste caso não tem que escapar o espaço, visto que coloquei a var entre "aspas".
É isso....
______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts