Simular la pulsación de la tecla ENTER en un script bash


97

He creado un script bash realmente simple que ejecuta algunos comandos. uno de estos comandos necesita la entrada del usuario durante el tiempo de ejecución. es decir, le pregunta al usuario "¿quieres bla, bla, bla?", simplemente quiero enviar una pulsación de tecla enter para que el script esté completamente automatizado.

No tendré que esperar la entrada ni nada durante el tiempo de ejecución, es suficiente con enviar la pulsación de tecla y el búfer de entrada se encargará del resto.


1
Si la herramienta que está intentando automatizar es apt-get, la solución adecuada es preconfigurar la base de datos debconf con sus valores preferidos; entonces no te preguntará.
tripleee

Puede usar printf en lugar de echo: printf "hola \ n"
hassanzadeh.sd

Respuestas:


133
echo -ne '\n' | <yourfinecommandhere>

o aprovechando la nueva línea implícita que genera el eco (gracias Marcin)

echo | <yourfinecommandhere>

Ahora podemos simplemente usar la --skopción:

--sk, --skip-keypressNo espere a que se presione una tecla después de cada prueba

es decir sudo rkhunter --sk --checkall


1
si alimenta esta salida xxd, obtiene 5c6ehexadecimal, que es un literal \n. si lo haces echo | xxd , en realidad terminas con un hechizo de 0a. Así que supongo que utilice el programa que necesite.
Marcin

3
@Marcin, me sorprende, obtengo lo 0a0aque todavía no es el previsto, agregando un -nsuprime la nueva línea implícita. Pero, por supuesto, tienes razón, un simple echo | ...funciona bien aquí. Actualizaré mi respuesta.
Tilman Vogel

Je, no me pareció del todo correcto, así que tuve que pasarlo por xxd. Es, con mucho, el método más simple pero eficiente para ver exactamente qué comandos generan. Me encantan los trucos estúpidos de Unix.
Marcin

@Marcin, aún así, ¿por qué te pones 5c6e? ¿Omitió -eo su caparazón o echono trató esa opción?
Tilman Vogel

me sale: echo -ne "\n" | xxd 0000000: 0a y echo -n "\n" | xxd 0000000: 5c6e y echo "\n" | xxd 0000000: 5c6e 0a no he visto ninguna diferencia entre comillas simples y dobles. Mi shell es solo un bash normal, ¿hay configuraciones que regulen el comportamiento de una funcionalidad tan básica?
Marcin

43

Puede que el yescomando le resulte útil.

Ver man yes


54
yesLo encuentro útil.
Pureferret

2
Esto simula presionar "y" repetidamente en lugar de la tecla Enter. Si bien esto es probablemente lo que desea para las preguntas de sí / no, no funcionará para nada que no espere una "y".
Burhan Ali

5
@BurhanAli: puede cambiar lo que yesenvía como salida. Lea la página del manual.
siride

1
¿Puedo enviar sí varias veces para un script que espera valores predeterminados [valor] {enter}
AK_

Esto solo funciona para cosas como yum. Donde se espera esa cadena.
einarc


22

Aquí está el uso de muestra usando expect:

#!/usr/bin/expect
set timeout 360
spawn my_command # Replace with your command.
expect "Do you want to continue?" { send "\r" }

Consultar: man expectpara más información.


especialmente útil si es necesario enviar varias pulsaciones de teclas de entrada
Andy

Esta es la mejor manera, especialmente para cosas como phars donde se envían diferentes cadenas stdout y stdin.
einarc

También recuerde ingresar my_command arg si tiene un argumento.
einarc

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.