summaryrefslogtreecommitdiffstats
path: root/util/bin/magic
diff options
context:
space:
mode:
Diffstat (limited to 'util/bin/magic')
-rwxr-xr-xutil/bin/magic63
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