当前位置: 首页 > ops >正文

【Linux-shell】探索Dialog 工具在 Shell 图形化编程中的高效范式重构

🔥个人主页 🔥

😈所属专栏😈

目录

dialog在不同系统下的安装

Debian/Ubuntu 及其衍生版

Red Hat/CentOS/Fedora

基本语法

dialog的窗口部件

 选择类组件

 文件与目录操作

输入与表单

 进度与信息展示

 时间与日期

特殊组件

dialog的命令选项

界面布局类选项

按钮与标签类选项

输入输出类选项

行为控制类选项

dialog的颜色设置


 

Dialog 是 Linux Shell 中用于创建图形化界面的工具,它能让脚本实现类似 GUI 的交互效果(如菜单、表单、进度条等),而无需 X Window 支持


dialog在不同系统下的安装

Debian/Ubuntu 及其衍生版

sudo apt update
sudo apt install dialog

Red Hat/CentOS/Fedora

# RHEL/CentOS 7 及以下
sudo yum install dialog# RHEL/CentOS 8+ 或 Fedora
sudo dnf install dialog

基本语法

dialog [--选项] [--标题 "标题文本"] [--文本 "提示信息"] [参数...]

dialog的窗口部件

 选择类组件

组件中文解释示例
--buildlist创建可编辑的列表,用户可添加 / 删除 / 修改项dialog --buildlist "选择文件" 15 40 5 "file1" "文件一" "on" "file2" "文件二" "off" 2> result
--checklist复选列表,可选择多个项dialog --checklist "选择爱好" 15 40 5 "1" "读书" "on" "2" "音乐" "on" "3" "运动" "off" 2> result
--radiolist单选列表,只能选择一项dialog --radiolist "选择颜色" 10 30 3 "1" "红色" "off" "2" "绿色" "on" "3" "蓝色" "off" 2> result
--menu简单菜单,通过标签选择dialog --menu "主菜单" 15 40 5 "1" "查看日志" "2" "重启服务" "3" "退出" 2> choice
--inputmenu可输入的菜单,用户可修改选项值dialog --inputmenu "设置参数" 15 40 3 "IP" "192.168.1.1" "Port" "8080" "User" "admin" 2> config
--treeview树形结构选择器,支持层级关系dialog --treeview "文件结构" 15 50 5 "/home" "主目录" "on" "0" "/home/user" "用户目录" "on" "1" 2> selected

 创建可编辑的列表,用户可添加 / 删除 / 修改项

  • 高度:对话框的总高度(行数)15
  • 宽度:对话框的总宽度(列数)40
  • 列表高度:列表区域的高度(行数)5
dialog --buildlist "选择文件" 15 40 5 "file1" "文件一" "on" "file2" "文件二" "off" 2> result

复选列表,可选择多个项

dialog --checklist "选择爱好" 15 40 5 "1" "读书" "on" "2" "音乐" "on" "3" "运动" "off" 2> result

单选列表,只能选择一项

dialog --radiolist "选择颜色" 10 30 3 "1" "红色" "off" "2" "绿色" "on" "3" "蓝色" "off" 2> result

简单菜单,通过标签选择

dialog --menu "主菜单" 15 40 5 "1" "查看日志" "2" "重启服务" "3" "退出" 2> choice

可输入的菜单,用户可修改选项值

dialog --inputmenu "设置参数" 15 40 3 "IP" "192.168.1.1" "Port" "8080" "User" "admin" 2> config

树形结构选择器,支持层级关系

dialog --treeview "文件结构" 15 50 5 "/home" "主目录" "on" "0" "/home/user" "用户目录" "on" "1" 2> selected

 

 文件与目录操作

组件中文解释示例
--dselect目录选择器,返回选中的目录路径dialog --dselect "/home/user/" 15 50 2> directory
--fselect文件选择器,返回选中的文件路径dialog --fselect "/etc/" 15 50 2> filename
--editbox文件编辑器,可直接编辑文本文件dialog --editbox "/tmp/config.txt" 20 60
--textbox文本查看器,显示文件内容(只读)dialog --textbox "/var/log/syslog" 20 60
--tailbox动态文本查看器,实时更新文件内容dialog --tailbox "/var/log/messages" 20 60
--tailboxbg后台动态文本查看器(显示后继续执行脚本)dialog --tailboxbg "/var/log/nginx/access.log" 20 60 &

目录选择器,返回选中的目录路径

dialog --dselect "/home/user/" 15 50 2> directory

文件选择器,返回选中的文件路径

dialog --fselect "/etc/" 15 50 2> filename

 

文件编辑器,可直接编辑文本文件

dialog --editbox "/tmp/config.txt" 20 60

文本查看器,显示文件内容(只读)

dialog --textbox "/var/log/syslog" 20 60

 

输入与表单

组件中文解释示例
--inputbox单行文本输入框dialog --inputbox "输入用户名" 10 30 "admin" 2> username
--passwordbox密码输入框(隐藏输入内容)dialog --passwordbox "输入密码" 10 30 2> password
--form多字段表单,支持不同类型输入dialog --form "用户信息" 15 40 3 "姓名:" 1 1 "" 1 10 20 0 "年龄:" 2 1 "" 2 10 3 0 2> info
--passwordform密码表单,部分字段隐藏输入dialog --passwordform "登录" 15 40 2 "用户名:" 1 1 "admin" 1 10 20 0 "密码:" 2 1 "" 2 10 20 1 2> login
--mixedform混合表单,支持多种输入类型dialog --mixedform "设置" 15 40 3 "姓名:" 1 1 "" 1 10 20 0 "年龄:" 2 1 "" 2 10 3 0 "男" 2 15 "" 2 20 1 1 2> settings

行文本输入框

dialog --inputbox "输入用户名" 10 30 "admin" 2> username

密码输入框(隐藏输入内容)

dialog --passwordbox "输入密码" 10 30 2> password

多字段表单,支持不同类型输入

dialog --form "用户信息" 15 40 3 "姓名:" 1 1 "" 1 10 20 0 "年龄:" 2 1 "" 2 10 3 0 2> info

密码表单,部分字段隐藏输入

dialog --passwordform "登录" 15 40 2 "用户名:" 1 1 "admin" 1 10 20 0 "密码:" 2 1 "" 2 10 20 1 2> login

 

 

 进度与信息展示

组件中文解释示例
--gauge进度条,显示百分比进度echo "50" | dialog --gauge "进度信息" 10 50 50
--mixedgauge混合进度条,显示多项进度dialog --mixedgauge "系统状态" 15 50 60 "CPU" 80 "内存" 40 "磁盘" 60
--infobox信息框(自动消失,无需用户交互)dialog --infobox "正在处理,请稍候..." 8 40; sleep 3
--msgbox消息框(需用户确认)dialog --msgbox "操作完成!" 10 30
--yesno确认对话框,提供是 / 否选项dialog --yesno "确定要删除此文件吗?" 10 40 && rm file.txt
--pause暂停提示框,显示倒计时dialog --pause "系统将在10秒后重启" 10 40 10

进度条,显示百分比进度

echo "50" | dialog --gauge "进度信息" 10 50 50 

混合进度条,显示多项进度

 

dialog --mixedgauge "系统状态" 15 50 60 "CPU" 80 "内存" 40 "磁盘" 60

信息框(自动消失,无需用户交互)

dialog --infobox "正在处理,请稍候..." 8 40; sleep 3

消息框(需用户确认)

dialog --msgbox "操作完成!" 10 30	

确认对话框,提供是 / 否选项

dialog --yesno "确定要删除此文件吗?" 10 40 && rm file.txt

暂停提示框,显示倒计时

dialog --pause "系统将在10秒后重启" 10 40 10

 时间与日期

组件中文解释示例
--calendar日历选择器,返回日期dialog --title "Calendar" --calendar "Date" 5 50
--timebox时间选择器,返回时间dialog --timebox "设置时间" 10 30 12 30 0 2> time

日历选择器,返回日期

dialog --title "Calendar" --calendar "Date" 5 50

时间选择器,返回时间

dialog --timebox "设置时间" 10 30 12 30 0 2> time

特殊组件

组件中文解释示例
--prgbox程序执行框,显示命令输出dialog --prgbox "执行中..." "ls -l" 20 60
--programbox程序执行框(自定义命令)dialog --programbox "系统信息" 20 60 < <(uname -a; free -h)
--progressbox数据流进度框,显示命令执行进度`tar cf - /home
--rangebox范围选择器,限制输入在指定范围内dialog --rangebox "选择端口号" 10 40 1 65535 8080 2> port

程序执行框,显示命令输出

dialog --prgbox "执行中..." "ls -l" 20 60

程序执行框(自定义命令)

dialog --programbox "系统信息" 20 60 < <(uname -a; free -h)

 

数据流进度框,显示命令执行进度

sudo apt update | dialog --progressbox "正在更新软件包列表..." 15 60

范围选择器,限制输入在指定范围内

dialog --rangebox "选择端口号" 10 40 1 65535 8080 2> port

dialog的命令选项

界面布局类选项

选项中文解释
--ascii-lines使用 ASCII 字符而非 UTF-8 绘制边框,兼容旧终端
--aspect <ratio>设置窗口宽高比(如 4:3),保持比例缩放
--backtitle <text>设置屏幕顶部的背景标题文本
--begin <y> <x>指定窗口左上角在屏幕中的坐标位置(行,列)
--clear关闭对话框后清除屏幕内容
--no-collapse禁止对话框自动缩小以适应内容
--no-lines不绘制窗口边框线
--no-shadow不显示窗口阴影效果
--shadow显示窗口阴影(默认开启,可用 --no-shadow 关闭)
--title <text>设置对话框标题栏文本

按钮与标签类选项

选项中文解释
--cancel-label <str>修改取消按钮的显示文本(默认 "Cancel")
--default-button <str>指定默认聚焦的按钮(如 "OK" 或 "Cancel")
--exit-label <str>修改退出按钮的显示文本
--extra-button添加第三个额外按钮
--extra-label <str>设置额外按钮的显示文本(需配合 --extra-button 使用)
--help-button添加帮助按钮
--help-label <str>设置帮助按钮的显示文本
--no-cancel移除取消按钮,仅保留确认按钮
--no-ok移除确认按钮(某些对话框类型适用)
--ok-label <str>修改确认按钮的显示文本(默认 "OK")
--yes-label <str>修改 "是" 按钮的显示文本(用于 --yesno 对话框)
--no-label <str>修改 "否" 按钮的显示文本(用于 --yesno 对话框)

输入输出类选项

选项中文解释
--input-fd <fd>指定输入文件描述符(默认从 stdin 读取)
--output-fd <fd>指定输出文件描述符(默认输出到 stderr)
--stdout将结果输出到 stdout 而非 stderr
--stderr将结果输出到 stderr(默认行为)
--output-separator <str>设置多值输出时的分隔符(如 --checklist
--quoted将输出结果用双引号包裹,处理包含空格的值
--single-quoted将输出结果用单引号包裹
--separate-output每个选择项单独输出一行(用于多选对话框)

行为控制类选项

选项中文解释
--beep操作时发出蜂鸣声(如按键、错误)
--beep-after操作完成后发出蜂鸣声
--colors启用 ANSI 颜色代码支持(可在文本中使用 $(color) 标记)
--column-separator <str>设置表格列之间的分隔符(如 --mixedform
--cr-wrap启用文本自动换行(默认开启)
--no-cr-wrap禁用文本自动换行
--default-item <str>指定默认选中的菜单项(标签文本)
--defaultno--yesno 对话框中默认选择 "否"(焦点在否按钮)
--help-status显示帮助信息时同时显示状态行
--help-tags在帮助文本中使用标签标记重点内容
--hfile <str>指定外部帮助文件路径
--hline <str>设置水平分隔线的显示字符
--ignore忽略 ESC 键,只能通过按钮关闭对话框
--insecure禁用密码输入的安全模式(显示输入内容)
--item-help为菜单项启用帮助文本功能
--keep-tite保持标题栏不变(某些对话框切换时不更新标题)
--keep-window关闭对话框后保留窗口框架
--last-key输出最后按下的按键编码(用于调试)
--max-input <n>限制输入框的最大字符数
--no-items不显示菜单项(用于只需要标题和文本的场景)
--no-kill禁止通过 Ctrl+C 强制终止对话框
--no-mouse禁用鼠标点击交互
--no-nl-expand不将换行符扩展为多行(保持原始文本格式)
--no-tags不显示菜单项前的标签(如 [*]
--nook--no-ok,移除确认按钮
--print-maxsize打印对话框最大可用尺寸后退出
--print-size打印对话框实际使用尺寸后退出
--print-text-only只打印对话框中的文本内容(不显示界面)
--print-text-size计算并打印显示指定文本所需的最小尺寸
--print-version输出版本信息后退出
--reorder允许用户重新排序列表项(如 --orderbox
--scrollbar为多行内容添加滚动条
--separate-widget <str>设置多控件间的分隔符(如 --mixedform
--tab-correct启用 Tab 键自动补全功能
--tab-len <n>设置 Tab 键的宽度(空格数)
--timeout <secs>设置超时自动关闭(返回状态码 255)
--trace <file>将运行轨迹记录到指定文件(用于调试)
--trim自动修剪输入内容的前后空格
--version输出版本信息后退出
--visit-items强制按顺序遍历菜单项(而非自由跳转)
--week-start <str>设置日历的星期起始日(0= 周日,1= 周一)

dialog的颜色设置

颜色设置方式,使用 dialog 内置的 \Z 转义序列

\Z<数字>    # 设置前景色
\Zb         # 加粗文本(Bold)
\Zu         # 下划线(Underline)
\Zr         # 反色显示(Reverse)
\Zn         # 恢复默认样式(Normal)
代码颜色
\Z0黑色
\Z1红色
\Z2绿色
\Z3黄色
\Z4蓝色
\Z5洋红色
\Z6青色
\Z7白色

 标题红色加粗,返回上一级绿色加粗

dialog --colors --menu "\Z1\Zb用法" 10 30 8 1 "查询选项用法" 2 "查询具体用法" 3 "\Z2\Zb返回上一级" 2> $temp

 

http://www.xdnf.cn/news/14536.html

相关文章:

  • 让大模型“更懂人话”:对齐训练(RLHF DPO)全流程实战解析
  • 蓝牙 5.0 新特性全解析:传输距离与速度提升的底层逻辑(面试宝典版)
  • 下载链接记录
  • 【Flink实战】 Flink SQL 中处理字符串 `‘NULL‘` 并转换为 `BIGINT`
  • Vue学习笔记
  • 二分查找----1.搜索插入位置
  • C/C++ 高频八股文面试题1000题(一)
  • ROS1/ROS2中工作空间和工作包创建详解
  • 服务网格安全(Istio):用零信任架构重构微服务通信安全
  • 5.3 LED字符设备驱动
  • 深度学习笔记27-LSTM实现糖尿病探索与预测(Pytorch)
  • 实验问题记录:PyTorch Tensor 也会出现 a = b 赋值后,修改 a 会影响 b 的情况
  • 解锁决策树:数据挖掘的智慧引擎
  • IT运维面试常问问题答案
  • QEMU学习之路(10)— RISCV64 virt 使用Ubuntu启动
  • 【C++】哈希表的实现(开放定址法)
  • 服务器手动安装并编译R环境库包:PROJ→RGDAL
  • C++ 11 智能指针 std::weak_ptr
  • 项目开发中途遇到困难的解决方案
  • RISC-V物联网关,支持鸿蒙,T-Thread实时系统
  • 关于Seata的一个小issue...
  • 【蓝牙】Qt4中向已配对的手机发送PDF文件
  • html和css实现文本打断换行、自动换行
  • linux下如何找到dump文件被生成到哪里了
  • 机构运动分析系统开发(Python实现)
  • Excel学习01
  • 257. 二叉树的所有路径(js)
  • DL00215-基于YOLOv11的太阳能电池红外异常检测含数据集
  • 【工具】Koishi|koishi跨平台聊天机器人开发平台使用方式(开发者方式)
  • 神经网络试题