
У меня есть папка с именем MyProperties
, в которой содержится несколько .properties
файлов, например 1.properties
, 2.properties
, 3.properties
и т. д. Каждый файл содержит что-то вроде:
keyname=value
Что мне написать здесь в качестве значения в файле свойств, чтобы оно было назначено или заменено? Как мне перебрать их в скрипте bash и назначить значение ключу?
Псевдокод:
#!/bin/bash
valuetobepassed="something"
#iterate over each file in the folder and replace/assign value corresponding to keyname
решение1
sed
Для замены значений в файлах можно использовать :
#!/bin/bash
new_value=5
for f_name in MyProperties/*.properties; do
sed -i "s/^keyname=.*$/keyname=$new_value/" "$f_name"
done
решение2
Если у вас действительно есть несколько файлов с varName=value
парами, то все, что вам нужно сделать, этоисточникИтак, перебираем все .properties
файлы и выбираем источник для каждого из них:
for file in /path/to/MyProperties/*.properties; do
. "$file"
done
Теперь все ваши переменные определены в вашем скрипте. Для иллюстрации:
$ cat foo.properties
foo="bar"
$ echo "$foo" ## no value
$ . ./foo.properties
$ echo "$foo"
bar
Это предполагает, что ваши .properties
файлы имеютничего, кроме пар переменная=значение. При поиске каждая строка файла будет выполнена в оболочке, запускающей скрипт, выполняющий поиск. Таким образом, любые команды в ваших .properties
файлах также будут выполнены. И любой злоумышленник, имеющий доступ к , MyProperties
может добавить туда вредоносную команду. Поэтому делайте это только в том случае, если вы уверены в содержимом файлов.
Обратите внимание, что важно, чтобы путь, указанный для .
встроенной функции, содержал /
символ (отсюда и ./foo.properties
вышеизложенное), так как в противном случае файл будет искаться в каталогах $PATH
вместо текущего каталога (в случае bash
и когда режим соответствия POSIX не используется, . file
поиск выполняется file
в текущем рабочем каталоге, если он не был найден в $PATH
).