summaryrefslogtreecommitdiffstats
path: root/util/bin/magic
blob: cb9cee6eee124b36b302e0734dd4bd49edfa1bab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#! /bin/sh
#
# magic NAME create FILE < CONTENT
# magic NAME update FILE < CONTENT
# magic NAME destroy FILE
#

bs="# begin krebs magic <$1>"
es="# end krebs magic <$1>"

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 DELIMITER_NAME FUNCTION 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 $2 in
  (create) create "$@" ;;
  (retrieve) retrieve "$@" ;;
  (update) update "$@" ;;
  (destroy) destroy "$@" ;;
  (*)
    help >&2
    echo 'Error 1: You are made of stupid!' >&2
    exit 23
esac