From b5e8f9bd5025021c63a1e863cb4f5af52a27cf97 Mon Sep 17 00:00:00 2001 From: Tom Eastep Date: Fri, 4 May 2018 08:52:40 -0700 Subject: [PATCH] Restore the read_yesno_with_timeout() function Signed-off-by: Tom Eastep --- Shorewall/lib.cli-std | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/Shorewall/lib.cli-std b/Shorewall/lib.cli-std index 9896e18d4..2d8c7df67 100644 --- a/Shorewall/lib.cli-std +++ b/Shorewall/lib.cli-std @@ -1063,6 +1063,41 @@ restart_command() { return $rc } +read_yesno_with_timeout() { + local timeout + timeout=${1:-60} + + case $timeout in + *s) + ;; + *m) + timeout=$((${timeout%m} * 60)) + ;; + *h) + timeout=$((${timeout%h} * 3600)) + ;; + esac + + read -t $timeout yn 2> /dev/null + if [ $? -eq 2 ] + then + # read doesn't support timeout + test -x /bin/bash || return 2 # bash is not installed so the feature is not available + /bin/bash -c "read -t $timeout yn ; if [ \"\$yn\" == \"y\" ] ; then exit 0 ; else exit 1 ; fi" # invoke bash and use its version of read + return $? + else + # read supports timeout + case "$yn" in + y|Y) + return 0 + ;; + *) + return 1 + ;; + esac + fi +} + # # Safe-start/safe-reload/safe-restart Command Executor #