• dialog软件包是一个制作窗口的极好工具,利用ANSI转义控制码在文本环境中重新创建了标准Windows对话框。可以很方便地将这些对话框合并到shell脚本中来与脚本用户进行交互。
  • dialog命令使用命令行参数确定生成的Windows小部件的类型。dialog软件包目前支持的小部件类型如下:
小部件 描述
calendar 提供一个可以在其中选择日期的日历
checklist 显示多个项目,这些项目均可以被打开或关闭
form 允许建立一个可以填写标签和文本字段的表单
fselect 提供一个文件选择窗口以浏览文件
gauge 显示一个说明完成百分比的仪表
infobox 显示信息而不等待响应
inputbox 显示单一的文本窗体框以输入文本
inputmenu 提供一个可变及的菜单
menu 显示一系列可供选择的选项
msgbox 显示消息并要求用户选择OK按钮
pause 显示一个说明指定暂停阶段状态的仪表
passwordbox 显示一个可以隐藏输入文本的单一文本框
passwordform 显示一个带标签和隐藏文本字段的表单
radialist 提供一组菜单项,但是值可选择一个项目
tailbox 利用tail命令在滚动的窗口中显示文件中的文本
tailboxbg 与tailbox相同,但是需在背景模式下操作
texbox 在滚动窗口中显示文件的内容
timebox 提供一个用来选择时、分、秒的窗口
yesno 提供一个含有Yes/No按钮的简单消息
  • 要在命令行上具体指定一个特定的小部件,需要使用双破折号格式:dialog --widget parameters #parameters定义该小部件窗口的大小以及它所需的任何文本

  • 每个对话框小部件均以两种形式提供输出:

    1. 使用STDERR:dialog --inputbox "Enter your age :" 10 20 2>age.txt
    2. 使用退出代码状态
  • dialog常用部件

  • msgbox小部件:dialog --msgbox text height width。dialog命令将使用heigth和width参数自动调整文本以适应所创建的窗口大小。放置标题,使用--title参数以及标题文本。必须放在–msgbox参数之前。

  • yesno小部件:e.g:dialog --title "test" --yesno "我是白痴吗?" 10 20

  • 输入框小部件(inputbox):dialog命令将文本字符串的值发送到STDERR。必须重定向此值来获取答案:e.g:dialog --inputbox "Enter your age:" 10 20 2>age.txt

  • 文本框小部件(textbox):e.g:dialog --textbox /etc/passwd 50 150窗口包含参数指定的文件的文本。

  • 菜单小部件(menu):dialog --menu "Sys Admin Menu"20 30 10 1 "Display disk space" 2 "Display users" 3 "Display memory usage 4 "Exit " 2>test.txt 第一个参数定义菜单的标题。后两个参数定义菜单窗口的高度和宽度,而第三个参数定义同时出现在窗口中的菜单项数。这些参数之后,必须添加菜单项目对。

  • fselect小部件:浏览文件从而选择文件:e.g:dialog --title "Select a file" --fselect $HOME/ 10 50 2>test.txtfselect后的第一个参数是窗口所使用的起始位置。

  • dialog命令选项

选项 描述
- -add-widget 除非按Esc或Cancel键,否则继续进入下一个对话框
- -aspect ratio 指定窗口宽度/高度的纵横比
- -backtitle title 指定在屏幕顶部、背景上显示的标题
- -bedin x y 指定窗口左上角的起始位置
- -cancel-label lable 为Cancel按钮指定一个可供选择的标签
- -clear 使用对话框默认背景色清除显示
- -colors 允许在对话框文本中嵌入ANSI颜色代码
- -cr-wrap 允许在对话框文本中加入换行符,强制换行。
- -create-rc file 转储样本配置文件至指定文件
- -defaultno 将yes/no对话框的默认值上设置为NO
- -default-item string 设置检查列表、表单或菜单对话框的默认项目
- -exit-label label 为Exit按钮指定可供选择的标签
- -extra-button 在OK和Cancel按钮之间,显示一个其他按钮
- -extra-label label 为Extra按钮指定可供选择的标签
- -help 显示dialog命令帮助信息
  • 在脚本中使用dialog命令:在脚本中使用dialog命令是一件非常容易的事,只需记住两点: 1. 如果Cancel或No按钮可用,请检查dialog命令的退出状态。 2. 重定向STDERR以获取输出值。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 #!/bin/bash
#using gdialog to create a menu
temp=`mktemp -t test.XXXXXX`
temp2=`mktemp -t test2.XXXXXX`
disk() {
	df -k >  $temp
	gdialog --textbox $temp 20 60
}
users() {
	who >  $temp
	gdialog --textbox $temp 20 60
}
memusage() {
	cat /proc/meminfo >  $temp
	gdialog --textbox $temp 20 60
}
while [ 1 ]
do
	gdialog --menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display users" 3 "Display memory usage" 0 "Exit" 2> $temp2
if [ $? -eq 1 ]
then
	break
fi
selection=`cat $temp2`
case $selection in
1)
	disk;;
2)
	users;;
3)
	memusage;;
0)
	break;;
*)
	gdialog --msgbox "Sorry,invalid selection" 10 30
esac
done
rm -f $temp 2> /dev/null
rm -f $temp2 2> /dev/null
  • KDE和GNOME桌面环境都扩充了dialog命令:KDE环境下默认包括kdialog软件包,GNOME环境下默认包括gdialog和zenity软件包。