diff options
author | June McEnroe <june@causal.agency> | 2020-08-13 20:38:34 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2020-08-14 16:00:34 -0400 |
commit | 2050d668af9e9eb2f20aa42c2f27eb0e3c7d182d (patch) | |
tree | a3876e8d6d2fb1311fdb594e9fd3153dbfae0cda | |
parent | Add prospective manual page for spawn (diff) | |
download | catsit-2050d668af9e9eb2f20aa42c2f27eb0e3c7d182d.tar.gz catsit-2050d668af9e9eb2f20aa42c2f27eb0e3c7d182d.zip |
Add tentative implementation of spawn(8)
-rw-r--r-- | spawn.sh | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/spawn.sh b/spawn.sh new file mode 100644 index 0000000..052a7fd --- /dev/null +++ b/spawn.sh @@ -0,0 +1,34 @@ +#!/bin/sh +set -eu + +die() { + echo "${0}:" "$@" >&2 + exit 1 +} + +: ${SPAWND_PIPE:=/var/run/spawnd.pipe} + +while getopts 'c:' opt; do + case "${opt}" in + (c) SPAWND_PIPE=$OPTARG;; + (?) exit 1;; + esac +done +shift $((OPTIND - 1)) + +if ! [ -p "${SPAWND_PIPE}" ]; then + die "${SPAWND_PIPE} is not a named pipe" +fi + +[ $# -lt 1 ] && die 'action required' +[ $# -lt 2 ] && die 'service name required' + +action=$(echo "${1}" | tr 'A-Z' 'a-z') +for valid in start stop restart status $(kill -l | tr 'A-Z' 'a-z'); do + [ "${action}" = "${valid}" ] && break +done +if [ "${action}" != "${valid}" ]; then + die "${action} is not a valid action or signal" +fi + +echo "$@" > "${SPAWND_PIPE}" |