Esto funcionó para mí en múltiples sabores de Linux, donde algunas de estas otras soluciones no lo hicieron (incluidas las más populares aquí). Creo que también es más legible...
echo Press enter to continue; read dummy;
Tenga en cuenta que se debe proporcionar una variable como argumento para read
.
Uso mucho estas formas que son muy cortas, y son como las soluciones de @theunamedguy y @Jim, pero además con tiempo de espera y modo silencioso.
Me encanta especialmente el último caso y lo uso en muchos scripts que se ejecutan en bucle hasta que el usuario presiona Enter .
Comandos
-
Ingrese la solución
read -rsp $'Press enter to continue...\n'
-
Solución de escape (con -d $'\e')
read -rsp $'Press escape to continue...\n' -d $'\e'
-
Cualquier solución clave (con -n 1)
read -rsp $'Press any key to continue...\n' -n 1 key # echo $key
-
Pregunta con opción preseleccionada (con -ei $'Y')
read -rp $'Are you sure (Y/n) : ' -ei $'Y' key; # echo $key
-
Solución de tiempo de espera (con -t 5)
read -rsp $'Press any key or wait 5 seconds to continue...\n' -n 1 -t 5;
-
Alias de sueño mejorado
read -rst 0.5; timeout=$? # echo $timeout
Explicación
-r especifica el modo sin formato, que no permite combinar caracteres como "\" o "^".
-s especifica el modo silencioso y porque no necesitamos salida de teclado.
-p $'solicitud ' especifica el aviso, que debe estar entre $' y ' para dejar espacios y caracteres de escape. Tenga cuidado, debe poner entre comillas simples el símbolo de dólares para beneficiar a los caracteres escapados, de lo contrario puede usar comillas simples.
-d $'\e ' especifica escape como carácter delimitador, por lo que como carácter final para la entrada actual, es posible colocar cualquier carácter, pero tenga cuidado de colocar un carácter que el usuario pueda escribir.
-n 1 especifica que solo necesita un carácter.
-e especifica el modo de línea de lectura.
-i $'Y ' especifica Y como texto inicial en modo readline.
-t 5 especifica un tiempo de espera de 5 segundos
clave sirve en caso de que necesite saber la entrada, en caso -n1, la tecla que se ha presionado.
$? sirven para saber el codigo de salida del ultimo programa, para lectura, 142 en caso de timeout, 0 entrada correcta. poner $? en una variable lo antes posible si necesita probarla después de algunos comandos, porque todos los comandos reescribirían $?
read
hace esto:
[email protected]:~$ read -n1 -r -p "Press any key to continue..." key
[...]
[email protected]:~$
El -n1
especifica que solo espera un solo carácter. El -r
lo pone en modo sin procesar, lo cual es necesario porque, de lo contrario, si presiona algo como una barra invertida, no se registra hasta que presiona la siguiente tecla. El -p
especifica el aviso, que debe estar entre comillas si contiene espacios. El key
El argumento solo es necesario si desea saber qué tecla presionaron, en cuyo caso puede acceder a él a través de $key
.
Si está utilizando Bash, también puede especificar un tiempo de espera con -t
, lo que hace que read devuelva un error cuando no se presiona una tecla. Entonces, por ejemplo:
read -t5 -n1 -r -p 'Press any key in the next five seconds...' key
if [ "$?" -eq "0" ]; then
echo 'A key was pressed.'
else
echo 'No key was pressed.'
fi
read
sin ningún parámetro solo continuará si presiona enter. El DOS pause
El comando continuará si presiona cualquier tecla. Utilice read –n1
si quieres este comportamiento.