Linux 下的dialog 工具
shell本身就是一种功能强大的程序设计语言。它能够轻松调用其他程序并对它们的输出进行处理,这种能力使得shell成为完成文本和文件处理任务的一个理想工具。dialog工具
如果你知道你的脚本程序只需要运行在Linux控制台上,则可以使用dialog工具命令,它以一种非常整洁的方式润色你的脚本程序。这个命令使用文本模式的图形和色彩,但它的确提供了友好的面向图形的解决方案。
一些Linux发行版默认并没有安装dialog工具。例如,对于Ubuntu来说,你可能必须添加公开维护的套件库来找到一个现成的版本。在其他 Linux发行版中,你可能会找到一个已安装的替代工具gdialog。它和dialog工具非常相似,但它依赖GNOME用户接口来显示其对话框。然 而,你得到的回报是你获得了一个真正的图形化界面。一般来说,你可以将任何使用dialog工具的程序中对dialog工具的调用替换为对gdialog 工具的调用,从而获得程序的一个图形化版本。我们将在本节最后提供一个使用gdialog的程序示例。
dialog工具的整体思想非常简单:一个带有各种各样参数和选项的程序,它可以显示各种类型的图形框,范围涵盖从最简单的Yes/No框到输入 框,甚至菜单选项。这个工具通常在用户执行某种类型的输入后返回,返回结果可以通过退出状态获得,或在用户输入文本时,通过标准错误流来获取。
在详细介绍它之前,我们先来看一个非常简单的使用dialog的例子。你可以在命令行上直接使用dialog,这对于程序的原型设计很有用。现在让我们创建一个简单的消息框,来显示传统意义上的第一个程序:
执行它就会在屏幕上显示一个图形化的消息框,你可以通过OK对话框关闭它(见图2-3)。
图 2-3 |
现在你已看出dialog的使用非常容易,接下来我们对它的各种可能性进行详细地介绍。表2-22列出了你可以创建的对话框的主要类型。
表 2-22
类型 |
用于创建 类型的选项 |
含义 |
复选框 |
--checklist |
允许用户显示一个选项列表, 每个选项都可以被单独选择 |
信息框 |
--infobox |
在显示消息后,对话框将立 刻返回,但并不清除屏幕 |
输入框 |
--inputbox |
允许用户输入文本 |
菜单框 |
--menu |
允许用户选择列表中的一项 |
消息框 |
--msgbox |
向用户显示一条消息,同时 显示一个OK按钮,用户可 以通过选择该按钮继续操作 |
单选框 |
--radiolist |
允许用户选择列表中的一个选项 |
文本框 |
--textbox |
允许用户在带有滚动条的 文本框中显示一个文件的内容 |
是/否框 |
--yesno |
允许用户提问,用户可 以选择yes或no |
还有一些其他的对话框类型(例如,进度框和密码框)可用。如果你想了解更多不常用的对话框类型,你也可以参考在线手册页。
如果想获得任何类型的允许文本输入或进行选择的对话框的输出,你必须捕获标准错误流,通常是把它指向某个临时文件以便后续处理。要想获得 Yes/No对话框的输出结果,只需查看它的退出码,与所有设计良好的程序一样,返回0表示成功(例如,选择yes选项),返回1表示失败。
所有的对话框类型都有各种各样的用于控制的参数,比如控制显示的对话框的大小和形状。我们首先列出每种类型需要的参数(见表2-23),然后在命令行上演示其中一部分参数的用法。最后,你将看到一个简单的将几种对话框结合起来的程序。
表 2-23
对话框类型 |
参数 |
--checklist |
text height width list- height [tag text status]... |
--infobox |
text height width |
--inputbox |
text height width [initial string] |
--menu |
text height width menu-height [tag item]... |
--msgbox |
text height width |
--radiolist |
text height width list-height [tag text status]... |
--textbox |
filename height width |
--yesno |
text height width |
除此之外,所有的对话框类型都有几个相同的参数选项。在此我们不一一列出,只介绍两个选项:--title和-clear。前者用于指定对话框的标题,后者用来完成清屏操作。完整的选项列表请查询手册页。
实 验 使用dialog工具