Estoy ejecutando un script que solicita ingresar 'y' en cada operación, estoy buscando una solución como $ ./script < echo 'yyyyyyyyyyyyyy'pasar todas mis entradas de una vez.
command-line
input
NewMrd
fuente
fuente

-fopción funciona bien con ciertos comandos.Respuestas:
Hay un comando creado específicamente para ese caso:
yesLo que esto hace es conectar la salida de
yesa la entrada de./script. Entonces, cuando./scriptsolicita la entrada del usuario, en su lugar obtendrá la salida deyes. La salida deyeses un flujo interminable deyseguido por una nueva línea. Básicamente, como si el usuario ingresaraypara cada pregunta de./script.Si quiere decir no (
n) en lugar de sí (y) puede hacerlo así:Tenga en cuenta que algunas herramientas tienen la opción de asumir siempre
yescomo respuesta. Consulte aquí, por ejemplo: omita el indicador yes / no en 'apt-get upgrade'Otros métodos para ingresar la entrada:
Si sabe exactamente cuántos
yespera su script, puede hacerlo así:Las líneas nuevas (
\n) son las teclas enter.Usando en
printflugar deyesusted tiene un control de entrada más fino:Tenga en cuenta que, en algunos casos excepcionales, el comando no requiere que el usuario presione enter después del carácter. en ese caso, deje las nuevas líneas:
En aras de la integridad también puede utilizar un documento aquí :
O si su shell lo admite una cadena aquí :
O puede crear un archivo con una entrada por línea:
Si el comando es lo suficientemente complejo y los métodos anteriores ya no son suficientes, entonces puede usar esperar .
Aquí hay un ejemplo de un script de espera super simple:
Nitpick técnico:
La invocación de comando hipotética que proporcionó en su pregunta no funciona:
Esto se debe a que la gramática del shell permite un operador de redireccionamiento en cualquier lugar de la línea de comando. En lo que respecta al shell, su línea de comando hipotética es la misma que esta línea:
Eso significa
./scriptque se llamará con el argumento'yyyyyyyyyyyyyy'y el stdin obtendrá información de un archivo llamadoecho. Y bash se queja porque el archivo no existe.fuente
cannot enable tty mode on non tty input. ¿Conocerías una solución para eso?printftruco con unrunarchivo que necesito para automatizar el proceso de instalación, todo lo que sucede es que recibo un mensaje de error que diceWarning: Tried to connect to session manager, None of the authentication protocols specified are supported, y el script se abre en una nueva terminal y me pide que ingrese mi entrada manualmente como de costumbre. Por cierto, esto está sucediendo en Debian. ¿Alguna sugerencia?Usa el comando
yes:Extracto de la página del manual:
fuente
Algunas cosas (
apt-getpor ejemplo) aceptan indicadores especiales para ejecutarse en modo silencioso (y aceptan valores predeterminados). Enapt-getel caso, solo pasa una-ybandera. Sin embargo, esto depende completamente de su script.Si necesita cosas más complicadas, puede ajustar su script en un script de espera. esperar le permite leer la salida y enviar entradas para que pueda hacer cosas bastante complicadas que otras secuencias de comandos no permitirían. Aquí hay uno de los ejemplos de su página de Wikipedia :
fuente
.shscript de shell, ¿verdad? ¿O hay alguna manera?En el script de shell también puede usar el siguiente truco de spawn, esperar y enviar
Sin embargo, en el escenario anterior, deberá indicar la frase que espera obtener mientras ejecuta el script. Para obtener más ejemplos, vaya al siguiente enlace
Esperar dentro de Bash
fuente
De acuerdo, puede que esta no sea una solución muy elegante, pero si escribe sus opciones en un archivo separado y luego lo pasa como una entrada al script, también funcionaría. Entonces, si crea un nuevo archivo con todas sus opciones (llame a este archivo como 'options.in'), entonces puede ejecutar fácilmente su script
./script.sh < options.iny editar / crear diferentes archivos de opciones según corresponda.fuente
options.inarchivo? ¿Puede dar un ejemplo?Estaba escribiendo un script bash con Dialog y necesitaba que esto también sucediera automáticamente. Hice esto y funcionó a las mil maravillas.
fuente
Puede proporcionar la entrada del usuario a su script con
cat, desde un archivo de texto, canalizado a su script debashesta manera:Simplemente ingrese su entrada de usuario deseada en su archivo input.txt, cualquier respuesta que desee: y, n, dígitos, cadenas, etc.
fuente