
Tengo una carpeta llamada MyProperties
y contiene varios .properties
archivos como 1.properties
, etc. Cada archivo contiene algo como:2.properties
3.properties
keyname=value
¿Qué debo escribir aquí como valor en el archivo de propiedades para que se asigne o reemplace? ¿Cómo repito estos en un script bash y asigno el valor a la clave?
Pseudocódigo:
#!/bin/bash
valuetobepassed="something"
#iterate over each file in the folder and replace/assign value corresponding to keyname
Respuesta1
Puede utilizar sed
para reemplazar valores en archivos:
#!/bin/bash
new_value=5
for f_name in MyProperties/*.properties; do
sed -i "s/^keyname=.*$/keyname=$new_value/" "$f_name"
done
Respuesta2
Si realmente tiene varios archivos con varName=value
pares, entonces todo lo que necesita hacer esfuenteél. Entonces, itere sobre todos .properties
los archivos y obtenga cada uno de ellos:
for file in /path/to/MyProperties/*.properties; do
. "$file"
done
Ahora tiene todas sus variables definidas en su script. Para ilustrar:
$ cat foo.properties
foo="bar"
$ echo "$foo" ## no value
$ . ./foo.properties
$ echo "$foo"
bar
Esto supone que sus .properties
archivos tienennada más que pares variable=valor. Al realizar el abastecimiento, cada línea del archivo se ejecutará en el shell que ejecuta el script que realiza el abastecimiento. Por lo tanto, .properties
también se ejecutarán todos los comandos de sus archivos. Y cualquier atacante con acceso MyProperties
puede agregar un comando malicioso allí. Así que sólo haga esto si puede estar seguro del contenido de los archivos.
Tenga en cuenta que es importante que la ruta proporcionada al .
archivo integrado contenga un /
carácter (de ahí lo ./foo.properties
anterior), ya que de lo contrario el archivo se busca en los directorios de $PATH
en lugar del directorio actual (en el caso de bash
que no esté en el modo de cumplimiento POSIX, . file
se busca file
en el directorio de trabajo actual si no se ha encontrado en $PATH
).