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
-f
opción funciona bien con ciertos comandos.Respuestas:
Hay un comando creado específicamente para ese caso:
yes
Lo que esto hace es conectar la salida de
yes
a la entrada de./script
. Entonces, cuando./script
solicita la entrada del usuario, en su lugar obtendrá la salida deyes
. La salida deyes
es un flujo interminable dey
seguido por una nueva línea. Básicamente, como si el usuario ingresaray
para 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
yes
como 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
y
espera su script, puede hacerlo así:Las líneas nuevas (
\n
) son las teclas enter.Usando en
printf
lugar deyes
usted 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
./script
que 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?printf
truco con unrun
archivo 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-get
por ejemplo) aceptan indicadores especiales para ejecutarse en modo silencioso (y aceptan valores predeterminados). Enapt-get
el caso, solo pasa una-y
bandera. 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
.sh
script 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.in
y editar / crear diferentes archivos de opciones según corresponda.fuente
options.in
archivo? ¿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 debash
esta manera:Simplemente ingrese su entrada de usuario deseada en su archivo input.txt, cualquier respuesta que desee: y, n, dígitos, cadenas, etc.
fuente