|
@@ -62,15 +62,52 @@ checkarg() {
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
+txt_append() {
|
|
|
+ local anchor="$1"
|
|
|
+ local insert="$2"
|
|
|
+ local infile="$3"
|
|
|
+ local tmpfile="$infile.swp"
|
|
|
+
|
|
|
+ # sed append cmd: 'a\' + newline + text + newline
|
|
|
+ cmd="$(printf "a\\%b$insert" "\n")"
|
|
|
+
|
|
|
+ sed -e "/$anchor/$cmd" "$infile" >"$tmpfile"
|
|
|
+ # replace original file with the edited one
|
|
|
+ mv "$tmpfile" "$infile"
|
|
|
+}
|
|
|
+
|
|
|
+txt_subst() {
|
|
|
+ local before="$1"
|
|
|
+ local after="$2"
|
|
|
+ local infile="$3"
|
|
|
+ local tmpfile="$infile.swp"
|
|
|
+
|
|
|
+ sed -e "s/$before/$after/" "$infile" >"$tmpfile"
|
|
|
+ # replace original file with the edited one
|
|
|
+ mv "$tmpfile" "$infile"
|
|
|
+}
|
|
|
+
|
|
|
+txt_delete() {
|
|
|
+ local text="$1"
|
|
|
+ local infile="$2"
|
|
|
+ local tmpfile="$infile.swp"
|
|
|
+
|
|
|
+ sed -e "/$text/d" "$infile" >"$tmpfile"
|
|
|
+ # replace original file with the edited one
|
|
|
+ mv "$tmpfile" "$infile"
|
|
|
+}
|
|
|
+
|
|
|
set_var() {
|
|
|
local name=$1 new=$2 before=$3
|
|
|
|
|
|
name_re="^($name=|# $name is not set)"
|
|
|
before_re="^($before=|# $before is not set)"
|
|
|
if test -n "$before" && grep -Eq "$before_re" "$FN"; then
|
|
|
- sed -ri "/$before_re/a $new" "$FN"
|
|
|
+ txt_append "^$before=" "$new" "$FN"
|
|
|
+ txt_append "^# $before is not set" "$new" "$FN"
|
|
|
elif grep -Eq "$name_re" "$FN"; then
|
|
|
- sed -ri "s:$name_re.*:$new:" "$FN"
|
|
|
+ txt_subst "^$name=.*" "$new" "$FN"
|
|
|
+ txt_subst "^# $name is not set" "$new" "$FN"
|
|
|
else
|
|
|
echo "$new" >>"$FN"
|
|
|
fi
|
|
@@ -79,7 +116,8 @@ set_var() {
|
|
|
undef_var() {
|
|
|
local name=$1
|
|
|
|
|
|
- sed -ri "/^($name=|# $name is not set)/d" "$FN"
|
|
|
+ txt_delete "^$name=" "$FN"
|
|
|
+ txt_delete "^# $name is not set" "$FN"
|
|
|
}
|
|
|
|
|
|
if [ "$1" = "--file" ]; then
|