53 lines
934 B
Bash
Executable File
53 lines
934 B
Bash
Executable File
#!/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
|