Una forma alternativa de hacer esto sería simplemente redirigir la entrada estándar a su archivo, donde tiene toda la entrada del usuario en el orden que espera el programa. Por ejemplo, con el programa (llamado script.sh
)
#!/bin/bash
echo "Enter your name:"
read name
echo "...and now your age:"
read age
# example of how to use the values now stored in variables $name and $age
echo "Hello $name. You're $age years old, right?"
y el archivo de entrada (llamado input.in
)
Tomas
26
puede ejecutar esto desde la terminal de una de las siguientes dos maneras:
$ cat input.in | ./script.sh
$ ./script.sh < input.in
y sería equivalente a simplemente ejecutar el script e ingresar los datos manualmente; imprimiría la línea "Hola Tomás. Tienes 26 años, ¿verdad?".
Como Radu Rădeanu ya ha sugerido , puede usar cat
dentro de su secuencia de comandos para leer el contenido de un archivo de manera disponible; en ese caso, necesita que cada archivo contenga solo una línea, con solo el valor que desea para esa variable específica. En el ejemplo anterior, debería dividir el archivo de entrada en uno con el nombre (por ejemplo, name.in
) y otro con la edad (por ejemplo, age.in
), y cambiar el read name
y read age
líneas de name=$(cat name.in)
y age=$(cat age.in)
respectivamente.
KEY=VALUE
pares? Las soluciones son bastante diferentes (si es la última, se aplica la respuesta de Takkat, la anterior Radu)