diff options
Diffstat (limited to 'util/bin/magic')
-rwxr-xr-x | util/bin/magic | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/util/bin/magic b/util/bin/magic new file mode 100755 index 00000000..a404c0c3 --- /dev/null +++ b/util/bin/magic @@ -0,0 +1,63 @@ +#! /bin/sh +set -euf + +bs="# begin krebs magic <$2>" +es="# end krebs magic <$2>" + +has() { + grep -q "^$bs$" $3 && grep -q "^$es$" $3 +} + +create() { + destroy "$@" + cat>>$3<<EOF +$bs +`cat` +$es +EOF +} + +retrieve() { + sed -n "/^$bs$/,/^$es$/p" $3 | sed '1d;$d' +} + +update() { + ! has "$@" || create "$@" +} + +destroy() { + if has "$@"; then + cache="`cat $3`" + echo "$cache" | sed "/^$bs$/,/^$es$/d" >$3 + fi +} +help() { +cat <<EOF +Usage: $0 FUNCTION DELIMITER_NAME FILE +$0 creates,updates or destroys magic inside a file. +It can be used to reliably add or remove custom lines. +For example add own lines in /etc/rc.local to auto-load +scripts. + +FUNCTION: + create -- creates new magic in file, takes stdin as content in magic + update -- updates already existing magic with text from stdin + destroy -- destroys magic boundary + retrieve -- retrieve the content of magic and writes to stdout + +Not yet implemented is the handling of magic not starting with the +shell comment symbol "#". + +EOF + +} +case $1 in + (create) create "$@" ;; + (retrieve) retrieve "$@" ;; + (update) update "$@" ;; + (destroy) destroy "$@" ;; + (*) + help >&2 + echo 'Error 1: You are made of stupid!' >&2 + exit 23 +esac |