#!/usr/bin/env bash err() { printf '%s\n' "$*" >&2; } workdir="/run/user/$UID/ssm/services" [[ -d "$workdir" ]] || { mkdir -p "$workdir" || exit 7 } while (( $# )); do case "$1" in -o|--oneshot) flag_oneshot=1;; -e|--edit) flag_edit=1;; -s|--start) flag_start=1;; -n|--name) service_name=$2; shift;; -w|--workdir) workdir=$2; shift;; --) shift; break;; *) break;; esac shift done [[ "$1" ]] || { err "Need at least one argument!" exit 5 } cmd=$1; shift [[ "$service_name" ]] || service_name=$cmd [[ "$cmd" == '/'* ]] || cmd=$(which "$cmd") args=$@ { printf '#!/usr/bin/env ssm\n\n' (( flag_oneshot )) && printf 'service_oneshot=1\n' printf 'service_command="%s"\n' "$cmd" [[ "$args" ]] && printf 'service_args=( %s )\n' "${service_args[*]}" } > "$workdir/$service_name" (( flag_edit )) && { "$EDITOR" "$workdir/$service_name" || exit 3 } (( flag_start )) && ssm "$workdir/$service_name" start