Dialog dialog
是基于ncurses
库的,在Linux的命令行下实现TUI界面的工具。
用法 dialog
的语法为dialog [选项] --title "标题" --控件类型 "描述" 高 宽 控件属性
当高 宽
为0 0
时,进行自动大小调整 当高 宽
为1 1
时,进行最大化列表高度
或菜单高度
为0
时,进行自动大小调整 在窗口中,选择OK
或·Yes
,dialog
返回0
,选择Cancel
或No
,dialog
返回1
,按下ESC
,dialog
返回255
dialog
的图形界面通过标准输出流 打印,选择与输入结果通过标准错误流 打印,要将结果保存到变量,要么使用2> 文件
进行过渡,要么通过3>&1 1>&2 2>&3
临时交换标准输出与标准错误,对于列表变量,还要通过($变量名)
转换为数组变量
选项 选项有以下几项:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 --stderr # 以标准错误方式输出 --stdout # 以标准输出方式输出 --output-separator "${IFS}" # 指定输出的分隔符,默认为换行(对列表来说是空格) --clear # 进行清屏操作。在窗口显示结束后,清除窗口。这个选项只能单独使用 --shadow # 出现阴影效果,这是默认选项 --no-shadow # 禁止阴影出现在每个对话框的底部 --insecure # 使用星号来代表每个字符,用于密码 --no-cancel # 在输入框,菜单,和复选框中,不显示"Cancel"选项 --ok-label "内容" # 覆盖"OK"按钮的内容,换成其他内容 --cancel-label "内容" # 覆盖"Cancel"按钮的内容,换成其他内容 --backtitle "标题" # 指定背景标题字符串,显示在背景顶部 --begin Y X # 指定对话框的左上角锚点在屏幕的上的坐标 --timeout 秒 # 如果用户在指定的时间内没有给出相应动作,就按超时(返回错误代码)处理 --sleep 秒 # 静止指定时间 --default-item "标签" # 设置在一份清单,表格或菜单中的默认项目。通常在框中的第一项是默认
控件
类型
选项
含义
日历框
--calendar "描述" 高 宽 [日 月 年]
提供了一个日历,让用户选择日期,打印到错误输出
时间框
--timebox [--time-format 格式] "描述" 高 宽
提供一个窗口,选择小时,分钟,秒,打印到错误输出
文件选择框
--fselect "目录路径" 高 宽
提供一个路径,让用户选择文件,路径打印到错误输出
进度框
--gauge "描述" 高 宽 起始百分比
类似于pv
命令,接受标准输入,按百分比显示输入进度
单选框
--radiolist "描述" 高 宽 菜单高度 "标签1" "内容1" on或off
让用户选择列表中的单个选项,打印选择的标签到错误输出
菜单框
--menu [--no-tags] [--no-items] "描述" 高 宽 菜单高度 "标签1" "内容1"...
让用户选择菜单中的单个选项,打印选择的标签到错误输出
复选框
--checklist [--no-tags] [--no-items] "描述" 高 宽 菜单高度 "标签1" "内容1" on或off...
让用户选择列表中的多个选项,打印空格分隔的标签列表到错误输出
信息框
--infobox "描述" 高 宽
对话框立刻显示消息并继续执行,但并不清除屏幕
输入框
--inputbox "描述" 高 宽 ["初始输入内容"]
允许用户输入文本,将输入内容打印到错误输出
密码框
--passwordbox --insecure "描述" 高 宽 ["初始输入内容"]
类似于输入库,但是不在窗口中显示输入内容
消息框
--msgbox "描述" 高 宽
向用户显示一条消息,同时显示一个OK按钮,用户确认后才会继续操作
文本框
--textbox [--scrollbar] "文件路径" 高 宽
在带有滚动条的文本框中显示一个文件的内容
反文本框
--tailbox "文件路径" 高 宽
从下而上的在文本框中显示一个文件的内容
编辑框
--editbox "文件路径" 高 宽
在窗口中编辑一个文件
是/否框
--yesno [--defaultno] "描述" 高 宽
进行提问,用户可以选择yes或no,yes返回0,no返回1
Whiptail whiptail
是由红帽开发的,基于newt
库的全新(1998年)TUI界面工具,相比于dialog
,whiptail
精简了部分选项,简化了用法,同时又保留了很大程度的兼容。目前大部分发行版制作的TUI工具都基于whiptail
。
用法 whiptail
的语法为whiptail [选项] --title "标题" --控件类型 "描述" 高 宽 控件属性
当高 宽
为0 0
时,进行自动大小调整 当高 宽
为1 1
时,进行最大化列表高度
或菜单高度
为0
时,进行自动大小调整 在窗口中,选择OK
或·Yes
,whiptail
返回0
,选择Cancel
或No
,whiptail
返回1
,按下ESC
,whiptail
返回255
whiptail
的图形界面通过标准输出流 打印,选择与输入结果通过标准错误流 打印,要将结果保存到变量,要么使用2> 文件
进行过渡,要么通过3>&1 1>&2 2>&3
临时交换标准输出与标准错误,对于列表变量,还要通过($变量名)
转换为数组变量resize
命令会打印出whiptail
的LINES
与COLUMNS
变量,它们决定着whiptail
的窗口大小,可以通过eval "resize"
命令获取这两个变量,并在之后用于设定
选项 选项有以下几项:
1 2 3 4 5 6 7 8 --seperate-output # 对于列表,将分隔符从空格转换为换行符 --clear # 进行清屏操作。在窗口显示结束后,清除窗口。这个选项只能单独使用 --nocancel # 在输入框,菜单,和复选框中,不显示"Cancel"选项 --ok-button "内容" # 覆盖"OK"按钮的内容,换成其他内容 --cancel-button "内容" # 覆盖"Cancel"按钮的内容,换成其他内容 --backtitle "标题" # 指定背景标题字符串,显示在背景顶部 --topleft # 窗口从屏幕左上角开始定位,而不是屏幕中央 --default-item "标签" # 设置在一份清单,表格或菜单中的默认项目。通常在框中的第一项是默认
控件
类型
选项
含义
进度框
--gauge "描述" 高 宽 起始百分比
类似于pv
命令,接受标准输入,按百分比显示输入进度
单选框
--radiolist "描述" 高 宽 菜单高度 "标签1" "内容1" on或off...
让用户选择列表中的单个选项,打印选择的标签到错误输出
菜单框
--menu [--notags] [--noitems] "描述" 高 宽 菜单高度 "标签1" "内容1"...
让用户选择菜单中的单个选项,打印选择的标签到错误输出
复选框
--checklist [--notags] [--noitems] "描述" 高 宽 菜单高度 "标签1" "内容1" on或off...
让用户选择列表中的多个选项,打印空格分隔的标签列表到错误输出
信息框
--infobox "描述" 高 宽
对话框立刻显示消息并继续执行,但并不清除屏幕
输入框
--inputbox "描述" 高 宽 ["初始输入内容"]
允许用户输入文本,将输入内容打印到错误输出
密码框
--passwordbox "描述" 高 宽 ["初始输入内容"]
类似于输入库,但是不在窗口中显示输入内容
消息框
--msgbox "描述" 高 宽
向用户显示一条消息,同时显示一个OK按钮,用户确认后才会继续操作
文本框
--textbox [--scrolltext] "文件路径" 高 宽
在带有滚动条的文本框中显示一个文件的内容
是/否框
--yesno [--defaultno] [--yes-button "内容"] [--no-button "内容"] "描述" 高 宽
进行提问,用户可以选择yes或no,yes返回0,no返回1
实例 均以whiptail
为例。
二选一 1 2 3 4 5 6 if (whiptail --title "" --yesno "Choose between Yes and No:" 0 0) then echo "You chose Yes." else echo "You chose No." fi
获取输入 1 variable=$(whiptail --title "" --inputbox "Variable:" 0 0 3>&1 1>&2 2>&3)
获取密码 1 PASSWORD=$(whiptail --title "Password" --passwordbox "Enter your password:" 0 0 3>&1 1>&2 2>&3)
显示选择菜单 1 2 3 4 5 OPTION=$(whiptail --title "" --menu "Choose your option:" 0 0 0 \ "1" "I am option 1." \ "2" "I am option 2." \ "3" "I am option 3." \ "4" "I am option 4." 3>&1 1>&2 2>&3)
进行单选 1 2 3 4 5 OPTION=$(whiptail --title "" --radiolist "Choose your option:" 0 0 0 \ "1" "I am option 1." \ "2" "I am option 2." \ "3" "I am option 3." \ "4" "I am option 4." 3>&1 1>&2 2>&3)
进行多选 1 2 3 4 5 6 7 8 OPTIONS=$(whiptail --title "" --checklist \ "What is the Linux distro of your choice?" 0 0 0 \ "1" "I am option 1." on \ "2" "I am option 2." on \ "3" "I am option 3." off \ "4" "I am option 4." off 3>&1 1>&2 2>&3) OPTIONS_ARRAY=($OPTIONS)
进度条 1 2 3 4 for i in $(seq 1 100); do sleep 0.1 echo $i done | whiptail --title "" --gauge "" 0 0 0