Quiero insertar en mi script un valor (cadena) que leería de un archivo de texto.
Por ejemplo, en lugar de:
echo "Enter your name"
read name
Quiero leer una cadena de otro archivo de texto para que el intérprete lea la cadena del archivo y no la entrada del usuario.
KEY=VALUE
pares? Las soluciones son bastante diferentes (si es la última, se aplica la respuesta de Takkat, la anterior Radu)Respuestas:
Para leer variables de un archivo podemos usar el comando
source
o.
.Supongamos que el archivo contiene la siguiente línea
entonces podemos importar esta variable usando
fuente
<filename>
se ejecutará en su shell, por ejemplorm -rf /
, lo que podría ser muy peligroso.sed
para agregarlocal
palabras clave y hacer que el script sea un poco más seguro y no contaminar su alcance global. Así que dentro de una función hacercat global_variables.sh | sed -e 's/^/local /' > local_variables.sh
y luego usar. ./local_variables.sh
. Lo que importe en la función solo estará disponible en esa función. Tenga en cuenta que se supone queglobal_variables.sh
solo contiene una variable por línea.Teniendo en cuenta que desea que todo el contenido de su archivo de texto se mantenga en su variable, puede usar:
O, en pura fiesta:
fuente
echo $name
. Lo uso solo para prueba. A continuación, puede usar la$name
variable para su posterior procesamiento en cualquier lugar que desee en su secuencia de comandos.$name
variable es la cadena del archivo asignado mediante elcat $file
comando. ¿Qué no está claro o es tan difícil de entender?$file
variable separada si solo la usa una vez para cargar la$name
variable, solo usecat /path/to/file
Desde su script puede hacer esto:
Incluso puede hacer esto varias veces, por ejemplo, en un bucle
fuente
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
)y el archivo de entrada (llamado
input.in
)puede ejecutar esto desde la terminal de una de las siguientes dos maneras:
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 elread name
yread age
líneas dename=$(cat name.in)
yage=$(cat age.in)
respectivamente.fuente
vh=$(awk "NR==3 {print;exit}" /var/www/test.txt)
. Luego tendrá la cadena guardada en variable$vh
, para que pueda usarla así:mkdir "/var/www/$vh"
- esto creará una carpeta con el nombre especificado dentro de / var / www.Encontré una solución de trabajo aquí: https://af-design.com/2009/07/07/loading-data-into-bash-variables/
fuente
Desde
man bash:1785
, esta sustitución de comando es equivalentename=$(cat "$file")
pero más rápida.fuente
Respuesta corta:
fuente
Si desea utilizar varias cadenas, puede usar:
O
Si desea que el usuario indique el archivo
fuente
fuente
Lo uso para obtener una sola variable de un archivo
Cuando
GET_VAR
no se encuentre en${FILE}
él, estará en blanco en lugar de causar un error gracias a|| true
.Utiliza el
grep -P
que está en GNU grep pero no por defecto en todo grep al momento de escribir esto.fuente