#!/hint/bash ## # Just like systemd-notify(1), but slower, which is a shitty # workaround for a race condition in systemd. ## systemd-notify() { local args args="$(getopt -n systemd-notify -o h -l help,version,ready,pid::,status:,booted -- "$@")" ret=$?; [[ $ret == 0 ]] || return $ret eval set -- "$args" local arg_ready=false local arg_pid=0 local arg_status= while [[ $# -gt 0 ]]; do case "$1" in -h|--help) command systemd-notify --help; return $?;; --version) command systemd-notify --version; return $?;; --ready) arg_ready=true; shift 1;; --pid) arg_pid=${2:-$$}; shift 2;; --status) arg_status=$2; shift 2;; --booted) command systemd-notify --booted; return $?;; --) shift 1; break;; esac done local our_env=() if $arg_ready; then our_env+=("READY=1") fi if [[ -n "$arg_status" ]]; then our_env+=("STATUS=$arg_status") fi if [[ "$arg_pid" -gt 0 ]]; then our_env+=("MAINPID=$arg_pid") fi our_env+=("$@") local n printf -v n '%s\n' "${our_env[@]}" socat STDIO UNIX-SENDTO:"$NOTIFY_SOCKET" <<<"$n" }