Existe uma maneira de obter a caixa de diálogo Tipo de confirmação do usuário (como você tem certeza sim / não) quando executo um script (clicando duas vezes)? Não quero dizer no Terminal, mas uma caixa de confirmação gráfica, algo como isto:
(Eu sei que a imagem é do Windows, não consegui encontrar uma do Linux)
if zenity...
ouzenity... || exit
Você pode usar
xmessage
no próprio script. Coloque algo assim depois do "shebang":xmessage "Are you sure?"
Isso exibirá uma mensagem gráfica dizendo "Você tem certeza?" com um botão "ok".
Você pode configurar
xmessage
para ter mais de um botão e alterar o que está escrito nele. Você também pode configurar as ações realizadas por cada botão.Por exemplo,
Veja
man xmessage
todas as opções (existem muitas).fonte
Em vez de lhe dizer como fazê-lo, direi que você não deveria estar fazendo isso.
TL; DR - Não altere seu script. Em vez disso, configure seu gerenciador de arquivos ou descubra por que seus usuários o executam acidentalmente.
EDIT: Você parece tratar seu script como algo especial, como se as configurações gerais não fossem boas o suficiente e seu script precise de confirmação especial do usuário. Clicar duas vezes nele é a confirmação. Se você achar que seus usuários o executam acidentalmente, precisará descobrir por que eles fazem isso e resolver isso. Seu problema real não é como exigir confirmação, mas como impedir que seus usuários a executem acidentalmente.
Pela maneira como expõe seu problema, parece que você espera que seu programa (script) seja executado navegando até onde está o arquivo e, em seguida, clicando nele no gerenciador de arquivos. Pense em todos os outros programas em seu sistema. Quantos você começa assim? Você navega para
/usr/local/bin
quando inicia o Firefox? Claro que não. Você clica no menu de aplicativos. (o gnome tweak é um script python, talvez seja um exemplo melhor)Espero que você não considere clicar nele no menu de aplicativos como um acidente. Portanto, seu problema passa a ser como fazer com que seu script apareça lá em vez de usar o gerenciador de arquivos. Para fazer isso, faça o seguinte:
coloque seu script longe dos outros arquivos nos quais o usuário possa clicar acidentalmente (o local típico é
/usr/local/bin/
para uma instalação em todo o sistema ou~/.local/bin/
para uma instalação do usuário)crie um arquivo de entrada da área de trabalho (leia as especificações padrão ). Aqui está um caso mínimo:
e empurrá-lo em
/usr/local/share/applications/your-script.xml
ou~/.local/share/your-script.xml
.Finalmente corra
update-desktop-database
.Como você está clicando duas vezes no script, é tarefa do seu gerenciador de arquivos confirmar isso. Não é tarefa do script confirmar se deve ser executado. Leve isso ao extremo. Você pode imaginar como seria ridículo que cada vez que você ligasse para algum programa, você tivesse que confirmá-lo?
O único momento em que um programa deve pedir confirmação é quando está prestes a fazer algo possivelmente perigoso e irreversível. Por exemplo, substituindo um arquivo ou ignorando a lixeira. E observe que mesmo esses exemplos são sobre como fazer um programa fazer algo específico. Não se trata de iniciar esses programas. Se um único objetivo do programa é fazer uma coisa tão perigosa, também não deve pedir confirmação.
De fato, o Nautilus (gerenciador de arquivos Gnome) já solicita por padrão que você confirme se deseja executar um script (ou apenas abri-lo em um editor de texto).
E, é claro, esse comportamento é configurável, dando ao usuário a possibilidade de desativá-lo (observe a entrada em Arquivos de texto executáveis ).
Portanto, não adicione uma caixa de diálogo de confirmação irritante ao seu script. Configure seu gerenciador de arquivos corretamente. E deixe seus usuários fazerem o mesmo.
fonte
Você pode usar o yad, que é como a zenidade dos esteróides, pois é muito mais configurável. Você pode instalá-lo a partir do Centro de Software no Ubuntu. Na sua forma mais básica, você pode digitar
yad --title=Question --image=dialog-question --text="Are you sure?"
e você deve ver isso:
Se OK foi pressionado, obtemos um código de retorno 0, se Cancelar foi pressionado, obtemos um código de retorno 1.
Seria melhor colocar a caixa no centro e também ajustar a largura dela, use uma guia à esquerda para posicionar o texto "Você tem certeza?" mais à direita e também sempre em cima. Para isso, precisamos:
yad --center --on-top --title=Question --image=dialog-question --text="\tAre you sure?" --width 200
A maioria das opções é auto-explicativa, exceto o "\ t" anterior ao "Você tem certeza?" que simplesmente adiciona um espaço de tabulação antes de imprimir o texto. Agora devemos ver isso:
A caixa está centralizada, sempre na parte superior e fica melhor. Para definir uma variável para testar qual botão foi pressionado, use:
yad --center --on-top --title=Question --image=dialog-question --text="\tAre you sure?" --width 200;result=$?;echo $result
Neste exemplo, estamos usando a variável $ result, que será definida como 0 se OK foi pressionado ou como 1 se Cancel foi pressionado.
Para obter ajuda com o yad, você pode usar
man yad
ou,yad --help-all
mas achei exemplos práticos mais fáceis de adaptar. Há alguns aqui . O yad é muito mais configurável e, portanto, mais utilizável que o zenity, na minha opinião.fonte