@@ -4,8 +4,8 @@
|
||||
pkgs.writeShellApplication {
|
||||
name = "merge-key-value";
|
||||
runtimeInputs = with pkgs; [
|
||||
gnugrep
|
||||
coreutils
|
||||
gawk
|
||||
];
|
||||
text = builtins.readFile ./key-value.sh;
|
||||
}
|
||||
|
@@ -1,19 +1,13 @@
|
||||
SOURCE_FILE=$(realpath -m "$1")
|
||||
TARGET_FILE=$(realpath -m "$2")
|
||||
|
||||
mkdir -p "$(dirname "${TARGET_FILE}")"
|
||||
|
||||
TEMP_FILE=$(mktemp)
|
||||
cat "${SOURCE_FILE}" > "${TEMP_FILE}"
|
||||
|
||||
if [[ -f "${TARGET_FILE}" ]]; then
|
||||
while IFS='=' read -r key value; do
|
||||
if ! grep -q "^${key}=" "${TEMP_FILE}"; then
|
||||
echo "${key}=${value}" >> "${TEMP_FILE}"
|
||||
fi
|
||||
done < "${TARGET_FILE}"
|
||||
TEMP_FILE=$(mktemp)
|
||||
awk -F '=' 'NR==FNR{a[$1]=$0;next}($1 in a){$0=a[$1]}1' "${SOURCE_FILE}" "${TARGET_FILE}" > "${TEMP_FILE}"
|
||||
mv "${TEMP_FILE}" "${TARGET_FILE}"
|
||||
else
|
||||
mkdir -p "$(dirname "${TARGET_FILE}")"
|
||||
cp "${SOURCE_FILE}" "${TARGET_FILE}"
|
||||
fi
|
||||
|
||||
mv "${TEMP_FILE}" "${TARGET_FILE}"
|
||||
|
||||
echo "Configuration file ${TARGET_FILE} has been updated."
|
||||
|
Reference in New Issue
Block a user