¿Es posible que un script bash maneje automáticamente las solicitudes que normalmente se le presentarán al usuario con acciones predeterminadas? Actualmente estoy usando un script bash para llamar a una herramienta interna que mostrará mensajes al usuario (solicitando Y / N) para completar acciones, sin embargo, el script que estoy escribiendo debe ser completamente "sin intervención", por lo que Necesito una forma de enviar Y|N
al indicador para permitir que el programa continúe ejecutándose. es posible?
109
yes
para hacer esto: unix.stackexchange.com/questions/47344/…Respuestas:
Esto no es "autocompletar", es automatización. Una herramienta común para estas cosas se llama Expect .
También puede salirse con la suya con solo canalizar la entrada de
yes
.fuente
yes
hizo el truco, afortunadamente, todas las indicaciones solo requerían una 'y' de todos modos. Gracias.Yes | command
puede que no funcione siempre. Si es solo para fines de instalación, entonces el uso-y
es una opción mejor y preferida.Un simple
Esto le permite pasar cualquier secuencia de "Y" o "N" a su secuencia de comandos.
fuente
N
tuviera que enviar alguno , habría usado este método, pero solo necesitaba Y, así que seguíyes
. Lástima que no pueda aceptar dos respuestas, ya que ambas son correctas.N
, ahora tienes una buena manera de hacerlo."Y N"
como entrada al primer mensaje y se cuelga en el segundo mensaje esperando que lo complete. Intenté cambiar los espacios a nuevas líneas, pero eso tampoco funcionó, aún así le di una cadena literal al indicador.printf 'y\ny\ny\n' | ./your_script
. De esta manera, está insertando manualmente la nueva línea para cada entrada esperada.printf '%s\n' Y Y N N Y N Y Y N
coloca nuevas líneas entre los elementos, pero sin necesidad de una cadena de formato grande.Encontré que la mejor manera de enviar entradas es usar cat y un archivo de texto para pasar cualquier entrada que necesites.
fuente
Si solo tiene Y para enviar:
Si solo tiene N para enviar:
fuente
En mi situación, necesitaba responder algunas preguntas sin S o N pero con texto o en blanco. Encontré que la mejor manera de hacer esto en mi situación era crear un archivo shellscript. En mi caso lo llamé autocomplete.sh
Necesitaba responder algunas preguntas para un exportador de esquemas de doctrina, por lo que mi archivo se veía así.
- Este es solo un ejemplo -
Lo que me gusta de esta estrategia es que puedes comentar cuáles son tus respuestas y usando EOF una línea en blanco es solo eso (la respuesta predeterminada). Resulta, por cierto, que esta herramienta de exportación tiene su propia contraparte JSON para responder estas preguntas, pero lo descubrí después de hacer esto =).
para ejecutar el script simplemente esté en el directorio que desee y ejecútelo
'sh autocomplete.sh'
en la terminal.En resumen, al usar << EOL & EOF en combinación con las líneas de retorno , puede responder a cada pregunta del mensaje según sea necesario. Cada nueva línea es una nueva respuesta.
Mi ejemplo solo muestra cómo se puede hacer esto con comentarios también usando el carácter `para que recuerde lo que es cada paso.
Tenga en cuenta que la otra ventaja de este método es que puede responder con más que solo Y o N ... ¡de hecho, puede responder con espacios en blanco!
Espero que esto ayude a alguien.
fuente
Hay una utilidad incorporada especial para esto: ' sí '.
Para responder a todas las preguntas con la misma respuesta, puede ejecutar
O puede ponerlo dentro de su guión para tener una respuesta específica a cada pregunta
fuente