You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Bash菜单脚本使其执行后返回菜单而非退出

修改后的Bash菜单脚本

以下是满足你需求的修改版脚本,选中非退出选项后会保留执行结果,按下任意键返回菜单,仅退出选项会终止脚本:

#!/bin/bash

HEIGHT=15
WIDTH=40
CHOICE_HEIGHT=4
BACKTITLE="SOULMASK SERVER MENU"
TITLE="Title here"
MENU="Choose one of the following options:"

OPTIONS=(1 "login info"
         2 "Soulmask status"
         3 "Option 3"
         4 "exit")

# 循环显示菜单,直到选择exit或取消操作
while true; do
    CHOICE=$(dialog --clear \
                    --backtitle "$BACKTITLE" \
                    --title "$TITLE" \
                    --menu "$MENU" \
                    $HEIGHT $WIDTH $CHOICE_HEIGHT \
                    "${OPTIONS[@]}" \
                    2>&1 >/dev/tty)

    # 用户按ESC取消dialog时,直接退出循环
    if [ -z "$CHOICE" ]; then
        break
    fi

    clear
    case $CHOICE in
            1)
                w ; uptime
                ;;

            2)
                /usr/bin/systemctl status soulmask
                ;;

            3)
                who
                ;;

            4)
                exit 0
                ;;
    esac

    # 非退出选项执行后,等待用户按键再返回菜单
    if [ "$CHOICE" != "4" ]; then
        echo -e "\n\n按任意键返回菜单..."
        read -n 1 -s -r
    fi
done

关键修改说明

  • 循环包裹:用while true将菜单选择与逻辑处理全部包裹,实现执行完非退出选项后自动回到菜单的效果。
  • 按键等待机制:在非退出选项执行完成后,通过read -n 1 -s -r命令等待用户按任意键(-n 1读取单个字符、-s不回显输入、-r禁用转义字符),确保执行结果会保留到用户操作后才刷新界面。
  • 取消操作处理:增加了对用户取消dialog(如按ESC键)的判断,此时直接终止循环退出脚本,避免无意义的等待。

内容的提问来源于stack exchange,提问作者Sunyata Nothing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 20:52:03