2016-01-25 2 views
-1

Я искал файлы свойств, такие как . PATH_TO_PROPERTYFILE. Если после чтения значений, которые я меняю, как я могу обновить исходный файл, чтобы отразить это измененное значение?Как обновить массив в файле свойств из сценария оболочки?

Я пробовал $SOURCED_ARRY_NAME = ("${TEMP_ARRAY[@]}"), но это не помогло. Также я хочу, чтобы изменения были обновлены в файле свойств. Это в основном доступ к массиву из файла свойств и его изменение.

Формат файла Имя: abc.properties

services_deployed=() 

xyzapps_deployed=() 
+1

BTW, если 'TEMP_ARRAY' это один вы устанавливаете себя, обратите внимание, что имена переменных all-caps зарезервированы для использования в системе, поэтому неверно использовать их для собственных переменных; см. четвертый абзац spec @ http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html, отметив, что переменные оболочки и переменные среды совместно используют пространство имен. («Имя пространства имен переменных среды, содержащее строчные буквы, зарезервировано для приложений. Приложения могут определять любые переменные среды с именами из этого пространства имен без изменения поведения стандартных утилит».) –

+0

У вас есть полный список переменных который должен быть установлен в этом файле? В качестве альтернативы, у всех есть общий префикс? –

+0

У них нет общего префикса, но у меня есть список переменных, которые нужно обновить! – vthallam

ответ

1

Вы можете сгенерировать код, который устанавливает переменную текущего значения с declare -p.

Таким образом:

declare -p SOURCED_ARRAY_NAME >>"PROPERTYFILE" 

... добавит код, который устанавливает SOURCED_ARRAY_NAME его новое значение в конец файла с именем PROPERTYFILE.


Таким образом, если вы знаете полный список имен переменных, которые могут быть установлены в файле конфигурации, вы можете сделать это для всех из них:

vars=(SOURCED_ARRAY_NAME othervar1 othervar2 othervar3) 
write_config() { 
    local varname 
    for varname in "${vars[@]}"; do 
    [[ ${!varname+set} ]] && declare -p "$varname" 
    done 
} 

write_config >"propertyfile" 
+0

Я предполагаю, что эта работа для меня! Если я правильно понимаю, я формирую массивы и добавляю эти массивы в файл свойств вместо того, чтобы читать его и обновлять. Правильно ли я понимаю? – vthallam

+0

На самом деле я бы предпочел полностью переписать файл - с самого начала - если вы можете с ним справиться. Добавление оставляет вам проблему с множеством значений, установленным несколько раз (только с последним подсчетом), и длина файла постоянно растет. –

+0

Звучит неплохо! Спасибо за быстрый ответ :) – vthallam

Смежные вопросы