__line: handle fixed strings correctly, posix gave us -F -x for this case
Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
This commit is contained in:
parent
990581a459
commit
95513ab538
4 changed files with 31 additions and 16 deletions
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
#
|
#
|
||||||
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
|
# 2012-2013 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
#
|
#
|
||||||
# This file is part of cdist.
|
# This file is part of cdist.
|
||||||
#
|
#
|
||||||
|
@ -24,16 +24,18 @@ file="/$__object_id"
|
||||||
|
|
||||||
if [ -f "$__object/parameter/regex" ]; then
|
if [ -f "$__object/parameter/regex" ]; then
|
||||||
regex=$(cat "$__object/parameter/regex")
|
regex=$(cat "$__object/parameter/regex")
|
||||||
|
greparg=""
|
||||||
else
|
else
|
||||||
if [ ! -f "$__object/parameter/line" ]; then
|
if [ ! -f "$__object/parameter/line" ]; then
|
||||||
echo "Parameter line and regex missing - cannot explore" >&2
|
echo "Parameter line and regex missing - cannot explore" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
regex="^$(cat "$__object/parameter/line")\$"
|
regex="$(cat "$__object/parameter/line")"
|
||||||
|
greparg="-F -x"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Allow missing file - thus 2>/dev/null
|
# Allow missing file - thus 2>/dev/null
|
||||||
if grep -q "$regex" "$file" 2>/dev/null; then
|
if grep -q $greparg "$regex" "$file" 2>/dev/null; then
|
||||||
echo present
|
echo present
|
||||||
else
|
else
|
||||||
echo absent
|
echo absent
|
||||||
|
|
|
@ -38,7 +38,19 @@ case "$state_should" in
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "echo \"$line\" >> $file"
|
#echo "echo \"$line\" >> $file"
|
||||||
|
#line_sanitised=$(cat "$__object/parameter/line" | sed 's/"/\"/g')
|
||||||
|
# Idea: replace ' in the string:
|
||||||
|
# '"'"'
|
||||||
|
# |------> ': end the string
|
||||||
|
# |-|---> "'": create ' in the output string
|
||||||
|
# |--> ': continue the string
|
||||||
|
#
|
||||||
|
# Replace all \ so \t and other combinations are not interpreted
|
||||||
|
#
|
||||||
|
|
||||||
|
line_sanitised=$(cat "$__object/parameter/line" | sed -e "s/'/'\"'\"'/g" -e 's/\\/\\\\/g')
|
||||||
|
echo "echo '$line_sanitised' >> $file"
|
||||||
|
|
||||||
;;
|
;;
|
||||||
absent)
|
absent)
|
||||||
|
@ -47,17 +59,16 @@ case "$state_should" in
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ "$line" ] && regex="^$line\$"
|
greparg=""
|
||||||
|
if [ "$line" ]; then
|
||||||
# Replace all / with \/
|
regex="$line"
|
||||||
regex=$(echo "$regex" | sed 's;/;\\/;g')
|
greparg="-F -x"
|
||||||
echo $regex >&2
|
fi
|
||||||
|
|
||||||
cat << eof
|
cat << eof
|
||||||
tmp=\$(mktemp)
|
tmp=\$(mktemp)
|
||||||
sed '/$regex/d' "$file" > \$tmp && cat "\$tmp" > "$file" && rm -f "\$tmp"
|
grep -v $greparg '$regex' '$file' > \$tmp && cat "\$tmp" > '$file' && rm -f "\$tmp"
|
||||||
eof
|
eof
|
||||||
#echo "echo q | ex -c \"/${line}/d|w|q\" \"${file}\""
|
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Unknown state: $state_should" >&2
|
echo "Unknown state: $state_should" >&2
|
||||||
|
|
|
@ -32,11 +32,11 @@ regex::
|
||||||
given line, if the given regular expression does not match.
|
given line, if the given regular expression does not match.
|
||||||
|
|
||||||
In case of absent, ensure all lines matching the
|
In case of absent, ensure all lines matching the
|
||||||
regular expression are absent (cannot be combined with
|
regular expression are absent.
|
||||||
the line parameter, if state is absent).
|
|
||||||
|
|
||||||
If the regular expression contains / (slashes), they need
|
The regular expression is interpreted by grep.
|
||||||
to be escaped with \ (backslash): / becomes \/.
|
|
||||||
|
Must not be combined with line, if state is absent.
|
||||||
|
|
||||||
file::
|
file::
|
||||||
If supplied, use this as the destination file.
|
If supplied, use this as the destination file.
|
||||||
|
@ -64,9 +64,10 @@ __line legacy_timezone --file /etc/rc.conf --regex 'TIMEZONE=.*' --state absent
|
||||||
SEE ALSO
|
SEE ALSO
|
||||||
--------
|
--------
|
||||||
- cdist-type(7)
|
- cdist-type(7)
|
||||||
|
- grep(1)
|
||||||
|
|
||||||
|
|
||||||
COPYING
|
COPYING
|
||||||
-------
|
-------
|
||||||
Copyright \(C) 2012 Nico Schottelius. Free use of this software is
|
Copyright \(C) 2012-2013 Nico Schottelius. Free use of this software is
|
||||||
granted under the terms of the GNU General Public License version 3 (GPLv3).
|
granted under the terms of the GNU General Public License version 3 (GPLv3).
|
||||||
|
|
|
@ -6,6 +6,7 @@ Changelog
|
||||||
|
|
||||||
2.3.6:
|
2.3.6:
|
||||||
* New Type: __locale
|
* New Type: __locale
|
||||||
|
* Type __line: Ensure special characters are not interpreted
|
||||||
|
|
||||||
2.3.5: 2013-10-10
|
2.3.5: 2013-10-10
|
||||||
* Core: Unit test fix for remote_copy (Steven Armstrong)
|
* Core: Unit test fix for remote_copy (Steven Armstrong)
|
||||||
|
|
Loading…
Reference in a new issue