Fix input/output error infinite loop on broken /dev/tty
- Install menu: exit cleanly instead of looping forever when terminal unavailable - Container management: detect instant read failures vs normal 5s timeout refresh
This commit is contained in:
12
conduit.sh
12
conduit.sh
@@ -3191,8 +3191,18 @@ manage_containers() {
|
|||||||
|
|
||||||
echo -e " ${CYAN}────────────────────────────────────────${NC}"
|
echo -e " ${CYAN}────────────────────────────────────────${NC}"
|
||||||
echo -ne "\033[?25h"
|
echo -ne "\033[?25h"
|
||||||
|
local _mc_start=$(date +%s)
|
||||||
read -t 5 -p " Enter choice: " mc_choice < /dev/tty 2>/dev/null || { mc_choice=""; }
|
read -t 5 -p " Enter choice: " mc_choice < /dev/tty 2>/dev/null || { mc_choice=""; }
|
||||||
echo -ne "\033[?25l"
|
echo -ne "\033[?25l"
|
||||||
|
local _mc_elapsed=$(( $(date +%s) - _mc_start ))
|
||||||
|
|
||||||
|
# If read failed instantly (not a 5s timeout), /dev/tty is broken
|
||||||
|
if [ -z "$mc_choice" ] && [ "$_mc_elapsed" -lt 2 ]; then
|
||||||
|
_mc_tty_fails=$(( ${_mc_tty_fails:-0} + 1 ))
|
||||||
|
[ "$_mc_tty_fails" -ge 3 ] && { echo -e "\n ${RED}Input error. Cannot read from terminal.${NC}"; return; }
|
||||||
|
else
|
||||||
|
_mc_tty_fails=0
|
||||||
|
fi
|
||||||
|
|
||||||
# Empty = just refresh
|
# Empty = just refresh
|
||||||
[ -z "$mc_choice" ] && continue
|
[ -z "$mc_choice" ] && continue
|
||||||
@@ -5854,7 +5864,7 @@ main() {
|
|||||||
echo " 3. 🗑️ Uninstall"
|
echo " 3. 🗑️ Uninstall"
|
||||||
echo " 0. 🚪 Exit"
|
echo " 0. 🚪 Exit"
|
||||||
echo ""
|
echo ""
|
||||||
read -p " Enter choice: " choice < /dev/tty || true
|
read -p " Enter choice: " choice < /dev/tty || { echo -e "\n ${RED}Input error. Cannot read from terminal. Exiting.${NC}"; exit 1; }
|
||||||
|
|
||||||
case "$choice" in
|
case "$choice" in
|
||||||
1)
|
1)
|
||||||
|
|||||||
Reference in New Issue
Block a user