#!/bin/sh trap 'trap - 2 15; kill $pids $(pidof xcape) 1>/dev/null 2>&1' 2 15 EXIT LOGFILE="${LOGFILE:-${HOME}/.local/log/session.log}" infolog() { while IFS= read -r line; do echo "[$(date +%X)][INF][$1] $line" >"${LOGFILE}" done } errorlog() { while IFS= read -r line; do echo "[$(date +%X)][ERR][$1] $line" >"${LOGFILE}" done } start() { stdout="${XDG_RUNTIME_DIR:-/tmp}/${1}-stdout" stderr="${XDG_RUNTIME_DIR:-/tmp}/${1}-stderr" [ -p "$stdout" ] || mkfifo "$stdout" [ -p "$stderr" ] || mkfifo "$stderr" cat <"$stdout" | infolog "$1" & cat <"$stderr" | errorlog "$1" & pidof -sx "$1" || "./$1" >"$stdout" 2>"$stderr" & } cd "$HOME/.local/libexec/dwm/autorun.d" || exit 1 for s in *; do start "$s" pids="$! $pids" done wait