Estoy buscando crear un entorno basado en terminal para adaptar mi script Bash . Quiero que se vea así:
terminal
text-user-interface
tempforEncuéntrame en el bosque
fuente
fuente
dialog
, que es lo que parece usar.dialog
muestra el menú (pero acepta la aceptación) cuando se inicia a través de una expresión de sustitución de comando?whiptail
>dialog
tambiéntui
para su modo de ventana dividida (que muestra registros, fuente y comandos con,layout reg
por ejemplo, ytui reg vec
para mostrar registros vectoriales en la ventana de registro (de una manera no flexible, por lo que esa parte no es realmente útil: /) . IDK si Redhat escribió el parche que agregó esa característica, o incluso qué edad tiene.Respuestas:
La respuesta del usuario se almacena en el código de salida, por lo que puede imprimirse como de costumbre:
echo $?
(tenga en cuenta que0
significa "sí" y1
es "no" en el mundo de shell).Con respecto a otras preguntas de la sección de comentarios:
para poner en el cuadro de diálogo la salida de algún comando, simplemente use el mecanismo de sustitución de comandos
$()
, por ejemplo:para dar múltiples opciones al usuario, puede usar la
--menu
opción en lugar de--yesno
para almacenar la salida de la elección del usuario en la variable, uno necesita usar la
--stdout
opción o cambiar el descriptor de salida, ya sea de forma--output-fd
manual o manual, por ejemplo:Este truco es necesario porque,
dialog
por defecto, envía a stderr, no a stdout.Y como siempre,
man dialog
es tu amigo.fuente
?
variable, intenteecho $?
.parted -l
al usuario a través del cuadro de diálogo, entonces probablemente la opción--menu
sea una mejor opción en lugar de-yesno
. En tal caso, tendría que jugar un poco con los descriptores para almacenar la salida en la variable, por ejemplo:output=$(dialog --backtitle "Package configuration" --title "Configuration sun-java-jre" --menu "$(parted -l)" 15 40 4 1 "sda1" 2 "sda2" 3 "sda3" 3>&1 1>&2 2>&3 3>&-); echo $output
--stdout
opción.man dialog
La captura de pantalla en la pregunta parece cola de látigo (un programa funcionalmente reducido que imita el diálogo , usando newt en lugar de ncurses ). La forma en que se representan el título y los botones está integrada en cada programa, lo que hace que se vean diferentes.
Aquí hay un script que duplica la captura de pantalla original, ya sea para whiptail o dialog:
y para comparación, captura de pantalla con whiptail:
y con diálogo:
Además de la apariencia diferente del título y los botones, el diálogo usa diferentes colores por defecto (aunque eso es configurable, ver capturas de pantalla ), y usa menos líneas en la pantalla.
dialog (y whiptail) usan bibliotecas para administrar la visualización de líneas, colores, etc. Pero también puede ver el tritón utilizado en el programa anaconda de Red Hat como una biblioteca compartida llamada desde python (con la misma apariencia). En la misma línea, el programa de configuración del kernel comenzó como una copia (cortada) del cuadro de diálogo, y luego evolucionó a características usando una biblioteca compartida (sin el
lxdialog
programa original ) de forma muy similar a como se usa newt desde python.Desde bash: puede usar el cuadro de diálogo o el whiptail para las funciones más utilizadas. Alguien escribió un contenedor para aquellos (en perl) para permitir que los scripts usen más fácilmente esos o algunos otros, pero es mejor usar el diálogo directamente ya que el módulo perl es esencialmente de denominador común.
Las fuentes de diálogo incluyen ejemplos de todos los widgets junto con la mayoría de las opciones de línea de comandos:
Otras lecturas:
fuente
Creo que el paquete que estás buscando es ncurses .
Wikipedia describe ncurses de la siguiente manera:
Es ampliamente utilizado, por ejemplo, en la herramienta de configuración del kernel menuconfig:
Como está usando bash, puede usar Bash Simple Curses (como lo menciona Runium en el comentario a continuación).
fuente
ncurses
es una biblioteca C. (Si entiendo correctamente) OP quiere un entorno de secuencias de comandos (para bash).menuconfig
está escrito en C. Como alternativa adialog
, según otra respuesta, quizás podrías mencionar Bash Simple Curses que está escrito en bash (confiando entput
).ncurses
es la base de esto, y responde a una versión más general de la pregunta ... como la del título aquí :)zenity
.
.
otras interfaces gráficas de usuario (gui)
detiene la ejecución posterior del script aunque lo rompe. la línea: echo $? , nunca ocurrirá
fuente