diff options
-rwxr-xr-x | scripts/config | 44 |
1 files changed, 41 insertions, 3 deletions
diff --git a/scripts/config b/scripts/config index 567120a87c39..2283be2bb62c 100755 --- a/scripts/config +++ b/scripts/config | |||
@@ -62,15 +62,52 @@ checkarg() { | |||
62 | fi | 62 | fi |
63 | } | 63 | } |
64 | 64 | ||
65 | txt_append() { | ||
66 | local anchor="$1" | ||
67 | local insert="$2" | ||
68 | local infile="$3" | ||
69 | local tmpfile="$infile.swp" | ||
70 | |||
71 | # sed append cmd: 'a\' + newline + text + newline | ||
72 | cmd="$(printf "a\\%b$insert" "\n")" | ||
73 | |||
74 | sed -e "/$anchor/$cmd" "$infile" >"$tmpfile" | ||
75 | # replace original file with the edited one | ||
76 | mv "$tmpfile" "$infile" | ||
77 | } | ||
78 | |||
79 | txt_subst() { | ||
80 | local before="$1" | ||
81 | local after="$2" | ||
82 | local infile="$3" | ||
83 | local tmpfile="$infile.swp" | ||
84 | |||
85 | sed -e "s/$before/$after/" "$infile" >"$tmpfile" | ||
86 | # replace original file with the edited one | ||
87 | mv "$tmpfile" "$infile" | ||
88 | } | ||
89 | |||
90 | txt_delete() { | ||
91 | local text="$1" | ||
92 | local infile="$2" | ||
93 | local tmpfile="$infile.swp" | ||
94 | |||
95 | sed -e "/$text/d" "$infile" >"$tmpfile" | ||
96 | # replace original file with the edited one | ||
97 | mv "$tmpfile" "$infile" | ||
98 | } | ||
99 | |||
65 | set_var() { | 100 | set_var() { |
66 | local name=$1 new=$2 before=$3 | 101 | local name=$1 new=$2 before=$3 |
67 | 102 | ||
68 | name_re="^($name=|# $name is not set)" | 103 | name_re="^($name=|# $name is not set)" |
69 | before_re="^($before=|# $before is not set)" | 104 | before_re="^($before=|# $before is not set)" |
70 | if test -n "$before" && grep -Eq "$before_re" "$FN"; then | 105 | if test -n "$before" && grep -Eq "$before_re" "$FN"; then |
71 | sed -ri "/$before_re/a $new" "$FN" | 106 | txt_append "^$before=" "$new" "$FN" |
107 | txt_append "^# $before is not set" "$new" "$FN" | ||
72 | elif grep -Eq "$name_re" "$FN"; then | 108 | elif grep -Eq "$name_re" "$FN"; then |
73 | sed -ri "s:$name_re.*:$new:" "$FN" | 109 | txt_subst "^$name=.*" "$new" "$FN" |
110 | txt_subst "^# $name is not set" "$new" "$FN" | ||
74 | else | 111 | else |
75 | echo "$new" >>"$FN" | 112 | echo "$new" >>"$FN" |
76 | fi | 113 | fi |
@@ -79,7 +116,8 @@ set_var() { | |||
79 | undef_var() { | 116 | undef_var() { |
80 | local name=$1 | 117 | local name=$1 |
81 | 118 | ||
82 | sed -ri "/^($name=|# $name is not set)/d" "$FN" | 119 | txt_delete "^$name=" "$FN" |
120 | txt_delete "^# $name is not set" "$FN" | ||
83 | } | 121 | } |
84 | 122 | ||
85 | if [ "$1" = "--file" ]; then | 123 | if [ "$1" = "--file" ]; then |