El origen de esta pregunta, para mí, es poder ejecutar un comando whiptail en un %pre
script desde un archivo kickstart al instalar una distribución personalizada basada en Centos. Sin embargo, el comportamiento observado en Anaconda se puede reproducir fácilmente a través de los terminales virtuales de cualquier sistema Linux.
Para ejecutar el comando whiptail en Anaconda como kickstart %pre
script es necesario cambiar TTY y ejecutar el comando en este nuevo TTY. La sugerencia predominante sobre cómo hacer esto es:
%pre
exec </dev/tty6 >/dev/tty6 2>/dev/tty6
chvt 6
# then execute your command, for example:
whiptail --inputbox "Enter some text..." 10 30
# switch back to the original TTY
chvt1
exec </dev/tty1 >/dev/tty1 2>/dev/tty1
%end
Al usar este método, el cuadro de diálogo de whiptail se representa correctamente en el nuevo TTY, sin embargo, no puede haber interacción con el cuadro de diálogo, por ejemplo, presionando tab
, en lugar de cambiar entre los elementos de entrada de texto, "Aceptar" y "Cancelar", en realidad inserta una pestaña en el cuadro de entrada de texto. Del mismo modo, el uso de las teclas de flecha hace que se escriban secuencias de escape en el cuadro de diálogo:
Este comportamiento también se observa cuando se usa python snack (usa la misma biblioteca que whiptail - libnewt) y el diálogo.
Por supuesto, solo podría usar un script de shell interactivo, en lugar de usar el látigo, pero me preguntaba si alguien tenía alguna sugerencia sobre por qué se ve este comportamiento, ya que habría pensado que los únicos requisitos para que esto funcione serían para redireccionar correctamente los flujos de entrada y salida.
TL; DR
Estoy interesado en crear un script que contenga comandos whiptail / dialog que puedan ejecutarse en un TTY y que la salida / entrada del script vaya a / provenga de un TTY diferente.
exec </dev/tty6 >/dev/tty6 2>/dev/tty6
ychvt 6
respectivamente.