¿Cómo detengo un script bash hasta que un usuario ha presionado Space?
Me gustaría tener la pregunta en mi guión
Presione la barra espaciadora para continuar o CTRL+ Cpara salir
y luego el script debe detenerse y esperar hasta que se presione Space.
bash
control-flow
rubo77
fuente
fuente

Respuestas:
Puedes usar
read:fuente
read -n1 -rsp $'Press any key to continue or Ctrl+C to exit...\n'elsebloque siempre se ejecuta, incluso cuando se presiona la barra espaciadora.bash. Funciona si lo usasread _, si tienes otro shell que no seabash.''contener un espacio dentro?''para una cadena vacía. No hay espacio adentro. Supongo que también encaja si ingresas ENTER o TABEl método discutido en estas preguntas y respuestas sobre SO es probablemente el mejor candidato para una alternativa al
pausecomportamiento al que está acostumbrado en Windows cuando hace archivos BAT.Ejemplo
Aquí estoy ejecutando lo anterior y luego simplemente presiono cualquier tecla, en este caso la Dtecla.
Referencias
fuente
$antes de la cadena aquí-rsp $'Press:?echo -e "..."líneas adicionales . Es mucho más compacto en esas situaciones.Esto ahora imprime un mensaje sin una nueva línea final, se maneja de
CTRL+Cmanera confiable, invocasttysolo con la frecuencia necesaria y restaura el tty de control exactamente al estado en el que sesttyencontró. Busqueman sttyinformación sobre cómo controlar explícitamente los ecos, los caracteres de control y todo.También puedes hacer esto:
Podrías hacerlo
ENTER, sin[pruebas]y sinsttygusto:fuente
Podrías crear una función para ello:
Entonces puedes usar esto en todas partes en tu script:
fuente
un forro perezoso:
la desventaja es que pierde el control cuando el usuario presiona ctrl + c. El script siempre saldrá con el código 130 en ese caso.
fuente
La configuración
IFSpara vaciar la cadena suprime el comportamiento predeterminado de lectura de recortar espacios en blanco.ACTUALIZACIÓN 2018-05-23: Podemos simplificar esto usando la variable REPLY, que no está sujeta a división de palabras:
fuente
Aquí hay una manera que funciona en ambos
bashyzsh, y asegura E / S al terminal:¡Ponlo en tu
.{ba,z}shrcpara Gran Justicia!fuente