From 705e2416bc84931f11fafbb924a83847b4bd5126 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Mon, 2 Jan 2023 08:42:29 +0100 Subject: [PATCH] docs(usage): add more documentation --- timeout | 107 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 66 insertions(+), 41 deletions(-) diff --git a/timeout b/timeout index d501dd7..ca94880 100755 --- a/timeout +++ b/timeout @@ -1,76 +1,101 @@ #!/bin/sh usage() { - printf "Usage: %s [-t TIMEOUT] [-c COMMAND]\n\n" "$0" - printf "TIMEOUT and COMMAND can be set as env vars.\n" + printf "Usage: %s [-v] [-h] [-t TIMEOUT] [-c COMMAND]\n\n" "$0" +} + +help() { + cat << EOH + SYNOPSIS + $0 [-v] [-h] [-t TIMEOUT] [-c COMMAND] + + DESCRIPTION + + \`Timeout\` executes a command until the timeout is over. + When the command is finished before the timeout then the exit code is \`0\` else it's \`1\`. + + OPTIONS + + -h Show this help + + -v Display the command output (stderr) + + -c COMMAND + The command to execute + \`COMMAND=... $0\` works to. + + -t TIMEOUT + The timeout in seconds (default: 10) + \`TIMEOUT=... $0\` works to. +EOH } on_interrupt() { - print "Process aborted!\n" + print "Process aborted!\n" - exit 130 + exit 130 } create_script() { - printf "#!/bin/sh\n%s\n" "$1" > "$2" - chmod +x "$SCRIPT_FILE" + printf "#!/bin/sh\n%s\n" "$1" > "$2" + chmod +x "$SCRIPT_FILE" } run_script() { - if [ "$2" -eq 0 ]; then - "$SCRIPT_FILE" >/dev/null 2>&1 & - else - "$SCRIPT_FILE" >&2 & - fi + if [ "$2" -eq 0 ]; then + "$SCRIPT_FILE" >/dev/null 2>&1 & + else + "$SCRIPT_FILE" >&2 & + fi - printf "%d" $! + printf "%d" $! } stop_delete_script() { - kill -9 "$1" - rm -f "$2" + kill -9 "$1" + rm -f "$2" } check_pid() { - PID=$1 - LOOP=$2 + PID=$1 + LOOP=$2 - for _ in $(seq 1 "$((LOOP*2))"); do - test -d "/proc/$PID/" && sleep 0.5 || STATUS=0 - done + for _ in $(seq 1 "$((LOOP*2))"); do + test -d "/proc/$PID/" && sleep 0.5 || STATUS=0 + done - printf "%d" ${STATUS:-1} + printf "%d" ${STATUS:-1} } main() { - while getopts "ht:c:v" option; do - case "${option}" in - h) usage; exit 0;; - t) TIMEOUT="$OPTARG";; - c) COMMAND="$OPTARG";; - v) VERBOSE=1;; - *) usage; exit 1;; - esac - done + while getopts "ht:c:v" option; do + case "${option}" in + h) help; exit 0;; + t) TIMEOUT="$OPTARG";; + c) COMMAND="$OPTARG";; + v) VERBOSE=1;; + *) usage; exit 1;; + esac + done - TIMEOUT="${TIMEOUT:-10}" - VERBOSE="${VERBOSE:-0}" + TIMEOUT="${TIMEOUT:-10}" + VERBOSE="${VERBOSE:-0}" - if [ -z "$COMMAND" ]; then - printf "Command is required!\n" - exit 1 - fi + if [ -z "$COMMAND" ]; then + printf "Command is required!\n" + exit 1 + fi - SCRIPT_FILE="$(mktemp)" + SCRIPT_FILE="$(mktemp)" - create_script "$COMMAND" "$SCRIPT_FILE" + create_script "$COMMAND" "$SCRIPT_FILE" - SCRIPT_PID=$(run_script "$SCRIPT_FILE" "$VERBOSE") - EXIT_STATUS=$(check_pid "$SCRIPT_PID" "$TIMEOUT") + SCRIPT_PID=$(run_script "$SCRIPT_FILE" "$VERBOSE") + EXIT_STATUS=$(check_pid "$SCRIPT_PID" "$TIMEOUT") - stop_delete_script "$SCRIPT_PID" "$SCRIPT_FILE" + stop_delete_script "$SCRIPT_PID" "$SCRIPT_FILE" - exit "$EXIT_STATUS" + exit "$EXIT_STATUS" } trap on_interrupt INT