From 522cca88d54dbb3092f1e33f3e6c91cf2343822a Mon Sep 17 00:00:00 2001 From: asmeron Date: Tue, 3 Dec 2024 20:39:34 +0600 Subject: [PATCH] Fix /rc.preinit/01-inifile apply var=vol to other files --- ublinux/rc.preinit/01-inifile | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/ublinux/rc.preinit/01-inifile b/ublinux/rc.preinit/01-inifile index 2d51b4e..b01ffa1 100755 --- a/ublinux/rc.preinit/01-inifile +++ b/ublinux/rc.preinit/01-inifile @@ -51,14 +51,16 @@ SYSCONF="${ROOTFS}${SYSCONF}" [[ $(cat "${FILE_CONFIG}" 2>/dev/null) =~ ($'\n'|^)+"${LINE:1}"($'\n'|$)+ ]] || echo "${LINE:1}" >> "${FILE_CONFIG}" else # Если в строке нет '=' то пропустить - # Если строка содержит '=' и имя переменной не содержит пробел, то добавляем как переменная=значение: NAME_VAR=VALUE_VAR + # Если строка содержит '=' и имя переменной до [] не содержит пробел, то добавляем как переменная=значение: NAME_VAR=VALUE_VAR NAME_VAR=${LINE%%=*} [[ ${LINE} != ${NAME_VAR} ]] || continue - [[ ${NAME_VAR} =~ " " ]] && continue - # Удалим строку только с именем без значения: NAME_VAR= - [[ -f ${FILE_CONFIG} && $(cat -n ${FILE_CONFIG}) =~ ($'\n'|^)+[[:blank:]]*([[:digit:]]+)[[:blank:]]*"${NAME_VAR}="[^$'\n']*($'\n'|$)+ ]] && sed "${BASH_REMATCH[2]}d" -i "${FILE_CONFIG}" + [[ ${NAME_VAR%%[*} =~ " " ]] && continue + # Удалим строку только с именем NAME_VAR= + #[[ -e ${FILE_CONFIG} && $(cat -n ${FILE_CONFIG}) =~ (^|$'\n')+[[:blank:]]*([[:digit:]]+)[[:blank:]]*"${NAME_VAR}="[^$'\n']*($'\n'|$)+ ]] && sed "${BASH_REMATCH[2]}d" -i "${FILE_CONFIG}" # Обработка строк с паролями if [[ ${FILE_CONFIG##*/} == "users" && ${NAME_VAR} =~ ^("DEFAULTPASSWD"|"DEFAULTROOTPASSWD"|"NEEDEDUSERS"|"USERADD["|"GROUPADD[") ]]; then + [[ -e ${FILE_CONFIG} ]] && sed -E "/^[[:blank:]]*$(ere_quote_sed "${NAME_VAR}")=.*/d" -i "${FILE_CONFIG}" + [[ -e ${FILE_ROOT_USERS} ]] && sed -E "/^[[:blank:]]*$(ere_quote_sed "${NAME_VAR}")=.*/d" -i "${FILE_ROOT_USERS}" echo "${LINE}" >> ${FILE_ROOT_USERS} if [[ ${NAME_VAR} == @("DEFAULTPASSWD"|"DEFAULTROOTPASSWD"|"NEEDEDUSERS") ]]; then true @@ -69,7 +71,20 @@ SYSCONF="${ROOTFS}${SYSCONF}" else echo "${LINE}" >> "${FILE_CONFIG}" fi + elif [[ ! ${FILE_CONFIG%/*} =~ ^"${SYSCONF}" ]]; then + # Если файл указанный не конфигурационный из /etc/ublinux/ + VALUE_VAR=${LINE#*=} + [[ ${VALUE_VAR} =~ ^[\'\"]+.*[\'\"]+ ]] && VALUE_VAR=${VALUE_VAR:1:-1} + if ! grep -Eq "^[[:blank:]]*$(ere_quote_grep "${NAME_VAR}=${VALUE_VAR}")[[:blank:]]*$" "${FILE_CONFIG}" 2>/dev/null; then + if grep -Eq "^[[:blank:]]*$(ere_quote_grep "${NAME_VAR}")=.*$" "${FILE_CONFIG}" 2>/dev/null; then + sed -E "s/^([[:blank:]]*)($(ere_quote_sed "${NAME_VAR}"))=.*/\1\2=$(ere_quote_sed "${VALUE_VAR}")/g" -i "${FILE_CONFIG}" + else + [[ -e ${FILE_CONFIG} ]] && sed -E "/^[[:blank:]]*$(ere_quote_sed "${NAME_VAR}")=.*/d" -i "${FILE_CONFIG}" + echo "${LINE}" >> "${FILE_CONFIG}" + fi + fi else + [[ -e ${FILE_CONFIG} ]] && sed -E "/^[[:blank:]]*$(ere_quote_sed "${NAME_VAR}")=.*/d" -i "${FILE_CONFIG}" echo "${LINE}" >> "${FILE_CONFIG}" fi fi