Hay una manera de usar zenity
zenity --question --text "Are you sure?"
Puede probar el estado de salida de ese comando con $?
variables, algo como esto: if [ $? -eq 1 ];then exit 1 ; fi
. 0
es OK
, 1
es cancelar. Esta construcción funcionará bien si necesita probar el estado de salida de la ventana emergente más tarde, tal vez almacenar $?
justo después de que la ventana emergente salga a una variable. Como se discutió en los comentarios, las estructuras como abajo también funcionarán:
if zenity --question --text "Are you sure"
then
runSumeFunction
else
exit 1
fi
o
zenity --question --text "Are you sure?" || echo "User isn't sure:/"
Sergiy Kolodyazhnyy
fuente
if zenity...
ozenity... || exit
Podrías usar
xmessage
en el script mismo. Ponga algo como esto después del "shebang":xmessage "Are you sure?"
Esto mostrará un mensaje gráfico que dice "¿Estás seguro?" con un botón "ok".
Puede configurar
xmessage
para tener más de un botón y cambiar lo que está escrito en él. También puede configurar las acciones realizadas por cada botón.Por ejemplo,
Vea
man xmessage
todas las opciones (hay muchas).fuente
En lugar de decirte cómo hacerlo, te diré que no deberías hacerlo.
TL; DR: no cambie su secuencia de comandos. En su lugar, configure su administrador de archivos o descubra por qué sus usuarios lo ejecutan accidentalmente.
EDITAR: Parece que trata su secuencia de comandos de alguna manera especial, como si la configuración general no fuera lo suficientemente buena y su secuencia de comandos necesita una confirmación especial del usuario. Hacer doble clic sobre él es la confirmación. Si descubres que tus usuarios lo ejecutan por accidente, entonces debes averiguar por qué lo hacen y resolverlo. Entonces, su verdadero problema no es cómo solicitar la confirmación, sino cómo evitar que sus usuarios la ejecuten accidentalmente.
Por la forma en que expone su problema, parece que espera que su programa (script) se ejecute navegando hasta donde está el archivo y luego haciendo clic en él desde el administrador de archivos. Piense en todos los demás programas en su sistema. ¿Cuántos comienzas así? ¿Navegas
/usr/local/bin
cuando inicias Firefox? Por supuesto que tú no. Hace clic en él desde el menú de aplicaciones. (gnome tweak es un script de python, tal vez ese sea un mejor ejemplo)Esperemos que no consideres que hacer clic en él desde el menú de aplicaciones sea un accidente. Entonces, su problema es cómo hacer que su script aparezca allí en lugar de usar el administrador de archivos. Para hacer esto, debe hacer lo siguiente:
coloque su script lejos de los otros archivos donde el usuario puede hacer clic en él por accidente (el lugar típico es
/usr/local/bin/
para una instalación en todo el sistema o~/.local/bin/
para una instalación del usuario)crear un archivo de entrada de escritorio (lea las especificaciones estándar ) Aquí hay un caso mínimo:
y empujarlo en
/usr/local/share/applications/your-script.xml
o~/.local/share/your-script.xml
.Finalmente corre
update-desktop-database
.Como hace doble clic en el script, es tarea del administrador de archivos confirmarlo. No es el trabajo del script confirmar si debe ejecutarse. Lleva esto al extremo. ¿Te imaginas lo ridículo que sería que cada vez que llamaras a algún programa tuvieras que confirmarlo?
El único momento en que un programa debe pedir confirmación es cuando está a punto de hacer algo posiblemente peligroso e irreversible. Por ejemplo, sobrescribir un archivo o saltear la papelera. Y tenga en cuenta que incluso estos ejemplos tratan de hacer que un programa haga algo específico. No se trata de iniciar tales programas. Si el único propósito de un programa es hacer algo tan peligroso, entonces tampoco debería pedir confirmación.
De hecho, Nautilus (administrador de archivos Gnome) ya le pedirá por defecto que confirme si desea ejecutar un script (o simplemente abrirlo en un editor de texto).
Y, por supuesto, este comportamiento es configurable, lo que ofrece al usuario la posibilidad de desactivarlo (entrada de nota en archivos de texto ejecutables ).
Por lo tanto, no agregue un diálogo de confirmación molesto a su secuencia de comandos. Configure su administrador de archivos correctamente. Y deja que tus usuarios hagan lo mismo.
fuente
Puede usar yad, que es como zenity en esteroides, ya que es mucho más configurable. Puede instalarlo desde el Centro de software en Ubuntu. En su forma más básica, puede escribir
yad --title=Question --image=dialog-question --text="Are you sure?"
y deberías ver esto:
Si se presionó OK, obtenemos un código de retorno de 0, si se presionó Cancelar, obtenemos un código de retorno de 1.
Sería mejor poner el cuadro en el centro y también ajustar el ancho del mismo, usar una pestaña principal para colocar el texto "¿Está seguro?" más a la derecha y también tenerlo siempre arriba. Para esto necesitamos:
yad --center --on-top --title=Question --image=dialog-question --text="\tAre you sure?" --width 200
La mayoría de los interruptores se explican por sí mismos, excepto el "\ t" antes del "¿Está seguro?" que simplemente agrega un espacio de tabulación antes de imprimir el texto. Ahora deberíamos ver esto:
La caja está centrada, siempre en la parte superior y se ve mejor. Para establecer una variable para probar qué botón se presionó, use:
yad --center --on-top --title=Question --image=dialog-question --text="\tAre you sure?" --width 200;result=$?;echo $result
En este ejemplo, estamos utilizando la variable $ resultado que se establecerá en 0 si se presionó OK o en 1 si se presionó Cancelar.
Para obtener ayuda con yad, puede usar
man yad
o,yad --help-all
pero descubrí que los ejemplos prácticos son más fáciles de adaptar. Hay algunos aquí . yad es mucho más configurable y, por lo tanto, más utilizable que zenity en mi opinión.fuente