menu em yad não funciona os botões de fecha

1. menu em yad não funciona os botões de fecha

Morpheus
Minions

(usa Nenhuma)

Enviado em 27/06/2024 - 14:47h

O menu em yad esta dentro do loop while.

X e botão cancelar não funciona.

Problema é mostrado no final do gif


Usando isso quebra o loop while do menu :(

[ $? -ne 0 ] ; exit

ou

[ $? -ne 0 ] ; break




  


2. Re: menu em yad não funciona os botões de fecha

Alexa Bolada
alexabolada

(usa Debian)

Enviado em 27/06/2024 - 14:47h

Para corrigir o problema do menu em yad que não fecha, você pode adicionar um comando para lidar com a situação de cancelamento ou pressionar a tecla ESC.

Adicione o seguinte comando após a verificação do retorno do yad:

```bash
if [ $? -eq 252 ]; then
exit
fi
```

Este comando irá verificar se o código de retorno do yad é 252, que indica que o cancelar ou a tecla ESC foi pressionada. Se for verdadeiro, o script irá sair.

Além disso, certifique-se de que o yad esteja instalado no seu sistema. Você pode instalá-lo no Debian usando o seguinte comando:

```bash
$ sudo apt-get install yad
```

Dessa forma, o menu em yad deve funcionar corretamente e os botões de fechar devem responder adequadamente.


3. Re: menu em yad não funciona os botões de fecha

Morpheus
Minions

(usa Nenhuma)

Enviado em 27/06/2024 - 14:59h

@alexabolada

Mesmo usando o comando abaixo o botão cancelar não fecha o menu em yad dentro do loop while.

if [ $? -eq 252 ]; then
exit
fi

Parece que o código do X é 252 e do botão cancelar é 1



4. Re: menu em yad não funciona os botões de fecha

Alexa Bolada
alexabolada

(usa Debian)

Enviado em 27/06/2024 - 14:59h

Para fechar o menu em yad dentro do loop while ao pressionar o botão cancelar, você pode adicionar o comando [b]break[\/b] após o comando [b]exit[\/b] no seu script. Isso irá interromper a execução do loop while e fechar o menu. Veja como ficaria:

```bash
if [ $? -eq 252 ]; then
exit
break
fi
```


5. Re: menu em yad não funciona os botões de fecha

aguamole
aguamole

(usa KUbuntu)

Enviado em 27/06/2024 - 15:08h

Para sair de loop em shell é usado o comando "break".
if echo "$opcao" | grep $"Sair" 1> /dev/null ; then

clear

break # trocado exit por break.

fi

Após o break o shell vai executar o "exit 0" da ultima linha o que vai encerrar a execução do shell script.


6. Re: menu em yad não funciona os botões de fecha

Alexa Bolada
alexabolada

(usa Debian)

Enviado em 27/06/2024 - 15:09h

Para verificar o código do X, você pode executar o seguinte comando no terminal:

```
xev
```

Depois, ao pressionar o botão correspondente a tecla X, você verá o código 252.

E para o botão "cancelar", você pode verificar o código com o mesmo comando:

```
xev
```

E ao pressionar o botão do "cancelar", você verá o código 1.


7. Re: menu em yad não funciona os botões de fecha

Morpheus
Minions

(usa Nenhuma)

Enviado em 27/06/2024 - 15:13h


aguamole escreveu:

Para sair de loop em shell é usado o comando "break".
if echo "$opcao" | grep $"Sair" 1> /dev/null ; then

clear

break # trocado exit por break.

fi

Após o break o shell vai executar o "exit 0" da ultima linha o que vai encerrar a execução do shell script.


Queria retira a opção Sair do menu para usar somente a "tecla Esc", o "botão cancelar" e o "X" na parte superior do menu yad.

Mesmo usando o break o botão cancelar não funciona.



8. Re: menu em yad não funciona os botões de fecha

aguamole
aguamole

(usa KUbuntu)

Enviado em 27/06/2024 - 15:49h

Rapas, programar em shell ou outras linguagem, fica mais complicado de saber o que esta acontecendo se não usar um depurador. No shell o parâmetro de depuração é "set -x" escrito no inicio de script.
Executa com o set -x habilitado do programa que ele vai facilitar a sua vida, e sem mesmo assim vc não entender, passa o conteúdo do terminal para agente ver o que esta acontecendo. Eu vou executar aqui e ver se eu descubro o que falta.


9. Re: menu em yad não funciona os botões de fecha

aguamole
aguamole

(usa KUbuntu)

Enviado em 27/06/2024 - 16:26h

Então @minions eu teste aqui e o erro do seu código esta em
    # Se apertar CANCELAR ou ESC, então vamos sair...
[ $? -ne 0 ] &&
Vc não coloco o && como o exemplo acima.
Agora para fazer o botão de cancelar funcionar e também o botão fechar, vc tem que fazer um teste com if ou não para ele executar o exit caso o usuário click em cancelar ou fechar.
# Qualquer outro valor o exit será executado
[[ $opcao == * ]] && exit
Isso será colocado na ultima linhas do while.
Testado e funcionando com essa dica.

E o break no seu código não funciona, tem que ser o exit mesmo.
E por fim exclua a ultima linha "exit 0" porque é um código inútil no seu script, ele nunca será executado da forma que vc escreveu o código ate este momento.


10. Re: menu em yad não funciona os botões de fecha

aguamole
aguamole

(usa KUbuntu)

Enviado em 27/06/2024 - 17:16h

@minions vc pode fazer com if o conteúdo do while mas não fica legal com if não, os programadores eles trocam os "if" por "case".
http://www.dicas-l.com.br/arquivo/case_em_bash.php

Mas se vc ainda decidir usar o if a liberdade é sua.


11. Re: menu em yad não funciona os botões de fecha

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 27/06/2024 - 20:01h

Minions escreveu:

O menu em yad esta dentro do loop while.

X e botão cancelar não funciona.

Problema é mostrado no final do gif


#!/bin/bash

logo=""

titulo=""

cd $PWD

# ----------------------------------------------------------------------------------------

while : ; do

clear

opcao=$(yad \
--center \
--window-icon "$logo" \
--list \
--radiolist \
--title "$titulo" \
--text "O que deseja fazer?" \
--column "Opção" --column "descrição" \
--width="700" --height="500" \
true "1" \
false "2" \
false "3" \
false "4" \
false "5" \
false "6" \
false "7" \
false "8" \
false "Sair" )


# Se apertar CANCELAR ou ESC, então vamos sair...

[ $? -ne 0 ] # ; exit


##########################################################################################

if echo "$opcao" | grep $"1" 1> /dev/null ; then

clear


fi

##########################################################################################

if echo "$opcao" | grep $"2" 1> /dev/null ; then

clear


fi


##########################################################################################

if echo "$opcao" | grep $"3" 1> /dev/null ; then

clear


fi

##########################################################################################

if echo "$opcao" | grep $"4" 1> /dev/null ; then

clear

fi

##########################################################################################

if echo "$opcao" | grep $"5" 1> /dev/null ; then

clear


fi

##########################################################################################

if echo "$opcao" | grep $"6" 1> /dev/null ; then

clear


fi

##########################################################################################

if echo "$opcao" | grep $"7" 1> /dev/null ; then

clear


fi

##########################################################################################

if echo "$opcao" | grep $"8" 1> /dev/null ; then

clear


fi

##########################################################################################

# Sair

if echo "$opcao" | grep $"Sair" 1> /dev/null ; then

clear

exit

fi

##########################################################################################


done


exit 0




Usando isso quebra o loop while do menu :(

[ $? -ne 0 ] ; exit

ou

[ $? -ne 0 ] ; break


Segue sugestão:

#!/usr/bin/env bash

while : ;do

opcao=$(yad \
--center \
--window-icon "$logo" \
--list \
--radiolist \
--separator=" " --sep-value="|" --print-column='2' \
--title "sem titulo" \
--text "O que deseja fazer?" \
--column="Opção" --column="descrição" --column="Z" \
--width="400" --height="500" \
1 1 Um 2 2 Dois 3 3 Tres 4 4 Quatro 5 5 Cinco 6 6 Seis 7 7 Sete 8 8 Oito 9 9 Nove x x Exit
)

# Se apertar CANCELAR ou ESC, sai.
(( "$?")) && opcao="x";

case ${opcao/ } in
[1-9]) echo "Opção: [${opcao/ }]";;
x) echo "Opção: ${opcao/ } SAIR";exit 0;;
esac
done



______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/ | sed -nr '/^[ ]+Se/,/udou.$/s/^[ ]+//p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________



12. Re: menu em yad não funciona os botões de fecha

Morpheus
Minions

(usa Nenhuma)

Enviado em 28/06/2024 - 03:37h


aguamole escreveu:

@minions vc pode fazer com if o conteúdo do while mas não fica legal com if não, os programadores eles trocam os "if" por "case".
http://www.dicas-l.com.br/arquivo/case_em_bash.php

Mas se vc ainda decidir usar o if a liberdade é sua.



No link achei isso
# ver se o usuário clicou em 'sair' or no 'x' da janela
ACAO="$?"
test "$ACAO" -eq "1" || test "$ACAO" -eq "252"
if [ "$?" -eq "0" ]; then
exit
fi

https://www.vivaolinux.com.br/artigos/impressora.php?codigo=12713








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts