到那个时刻 bash 脚本,所有的脚本主要集中在命令行操作上。 无论您需要用户输入还是显示一些消息,一切都通过终端完成。 大多数使用 Bash 编写脚本的人都不知道有一组可用的 GUI 工具。 在本文中,我们将看到一个这样的工具,称为 禅度 – 一个简单的程序,使您能够在命令行和 shell 脚本中创建图形 (GTK+) 对话框。
什么是禅意?
Zenity 是 gdialog 的重写,GNOME 的对话框端口,它允许您为不同的操作创建一组小部件,用户可以在其中以图形方式与脚本交互。 这些小部件基于 GTK 工具包。
Zenity 是一个开源程序,使用 C 编程语言。 它支持 Linux、BSD 和 Windows。
事不宜迟,让我们看看如何使用 Zenity 从命令行和 shell 脚本显示图形 GTK+ 对话框。
如何在 Linux 中安装 Zenity
首先,通过运行以下命令检查 zenity 是否已安装并可使用:
$ which zenity /usr/bin/zenity
$ zenity --version 3.32.0
$ zenity --about
如果您的发行版中未安装 zenity,请根据您的发行版运行以下命令来安装它。
高山Linux:
$ sudo apk add zenity
Arch Linux:
$ sudo pacman -S zenity
Fedora、RHEL、CentOS、Alma Linux 和 Rocky Linux:
$ sudo dnf install zenity
Debian、Ubuntu、Linux Mint、流行操作系统:
$ sudo apt install zenity
openSUSE:
$ sudo zypper install zenity
1. Zenity 帮助和常用选项
对于每个小部件,都有一个关联的帮助选项,您可以通过它获得一组支持的选项。
运行以下命令以访问帮助部分。
$ zenity --help
有一些常用选项可以与任何小部件一起使用。 这些不是强制性选项,但如果使用将利用您来更改小部件的行为。
要获取常用选项列表,请运行以下命令。
$ zenity --help-general
我们将在接下来的部分中了解这些选项是如何工作的。
2.消息对话框
消息对话框将显示错误、警告、信息和问题对话框。 根据情况,您必须在脚本中使用适当的对话框。
2.1。 错误对话框
要访问错误对话框的支持选项列表,请运行以下命令:
$ zenity --help-error
要在脚本中显示错误对话框,请使用以下命令。 在这里, --error
flag 将创建错误对话框和 --text
flag 将打印文本消息。 您可以从图像中看到与对话框相关的错误图标。
zenity --error --title "Error Message" --width 500 --height 100 --text "Permission denied. Run with sudo or as root user."

从上图中也可以看出,一些常用的选项如–width、–height 用于控制对话框的几何形状。 标志 –title 用于打印带有标题的对话框栏。
2.2. 警告对话框
要访问警告对话框的支持选项列表,请运行以下命令:
$ zenity --help-warning
采用 --warning
脚本中的标志以显示警告框和 --text
标志以显示警告消息。
zenity --warning --title "Warning Message" --width 500 --height 100 --text "Disk space exceeded the threshold limit. Check ASAP."

2.3. 信息对话框
要访问信息对话框的支持选项列表,请运行以下命令:
$ zenity --help-info
采用 --info
在脚本中标记以显示信息框和 --text
标志以显示信息消息。
zenity --info --title "Info Message" --width 500 --height 100 --text "Installation completed successfully."

2.4. 问题对话框
要访问问题对话框的支持选项列表,请运行以下命令:
$ zenity --help-question
问题对话框将提示一条消息以及 是的 或者 不 选项。 如果按 “是的”,返回码将是 “零” 并且对于 “不” 返回码将是 “一”. 您必须使用退出代码在脚本中编写更多逻辑。
zenity --info --title "Info Message" --width 500 --height 100 --text "Installation completed successfully."

3.文本输入对话框
要访问文本输入对话框的支持选项列表,请运行以下命令:
$ zenity --help-entry
文本输入对话框提示用户输入。 国旗 --entry
用于创建条目对话框。 要在对话框中显示一些文本,请使用 --text
旗帜。 一旦您按确定,在文本框中输入的值将打印在终端中。 如果您希望像下面那样进一步处理来自文本框的输入,则必须将输出存储到变量中。
$ USR=$(zenity --entry --width 500 --title "check user" --text "Enter the user name"); echo $USR

如果您不希望在键入时使输入文本可见,请使用 --hide-text
旗帜。
$ USR=$(zenity --entry --width 500 --title "check user" --text "Enter the user name" --hide-text); echo $USR

您还可以使用 --entry-text
旗帜。 您必须删除该值并提供您的输入,否则现有值将被视为默认值。
$ USR=$(zenity --entry --width 500 --title "check user" --text "Enter the user name" --entry-text $USER); echo $USR

4.密码对话框
要访问密码对话框支持的选项列表,请运行以下命令:
$ zenity --help-password
密码对话框将接受用户名和密码,使用 --username
和 --password
旗帜。 输出将显示为(用户名 | 密码)。 您必须将命令的输出分配给变量并提取用户名和密码以进行进一步处理。
$ zenity --password --username

5.文本信息对话框
要访问文本信息对话框的支持选项列表,请运行以下命令:
$ zenity --help-text-info
文本信息对话框将打印文件中的任何文本或在对话框中打开 URL。 为了 example读取文件并显示文本使用标志 --filename
. 在下面 example,我正在阅读 /etc/hosts
文件。
zenity --text-info
--title "Hostname Information"
--filename "/etc/hosts"

这 --checkbox
flag 可用于获取用户的输入。 一个好的 example 将是“接受许可协议”。 除非您选中该复选框,否则确定按钮将被禁用。
zenity --text-info
--title "Hostname Information"
--filename "/etc/hosts"
--checkbox "This is a checkbox"

6.日历对话框
要访问日历对话框的支持选项列表,请运行以下命令:
$ zenity --help-calendar
日历对话框将显示日历并允许您选择日期。 您必须将输出存储到变量中,否则所选日期将打印在终端中。
zenity --calendar --title="Select a Date" --text="Select Date to pull the employee record."

默认情况下,选择今天的日期,但我们也可以使用 --day
, --month
, 和 --year
标志。
zenity --calendar --title="Select a Date" --text="Select Date to pull the employee record." --year 2015 --month 7 --day 15

默认输出格式为 DDMMYY
. 也可以使用 --date-format
旗帜。
zenity --calendar --title="Select a Date" --text="Select Date to pull the employee record." --date-format %m-%d-%y

7.颜色选择对话框
要访问颜色选择对话框的支持选项列表,请运行以下命令:
$ zenity --help-color-selection
颜色选择对话框将显示一个调色板并允许您选择一种颜色,输出将为 RGB 值。 采用 --color-selection
旗连同 --show-palette
旗帜。
$ COLOR_RGB=$(zenity --color-selection --show-palette) $ echo $COLOR_RGB

8.文件选择对话框
要访问文件选择对话框的支持选项列表,请运行以下命令:
$ zenity --help-file-selection
文件选择对话框将允许您选择文件或目录,并且路径显示为输出。 国旗 --file-selection
应该使用。 在文件选择对话框中可以使用几个标志。
--filename
=> 默认文件/目录的路径--directory
=> 只选择目录--multiple
=> 允许选择多个文件名--save
=> 设置为保存模式
zenity --file-selection --title "Select Files" --filename "/home/${USER}/" --multiple

在多选的情况下,文件路径将使用 "|"
象征。

可以使用 --separator
旗帜。 在下面 example, 我在用 冒号 (:
) 作为分隔符。
zenity --file-selection --title "Select Files" --filename "/home/${USER}/" --multiple --separator :

9.表格对话框
要访问表单对话框的支持选项列表,请运行以下命令:
$ zenity --help-forms
表单对话框允许您创建表单。 一个好的 example 是新用户注册表单。 采用 --forms
标志创建表单对话框。 还有一些额外的标志可以与 --forms
旗帜。
--add-entry
=> 在表单对话框中添加一个新条目,供用户输入。--text
=> 要在对话框中显示的文本。--add-password
=> 接受密码但不会在屏幕上显示该值。--calendar
=> 打开日历并从中选择一个日期。
下面是一个简单的 example 使用表单对话框的用户注册表单。
zenity --forms --text "Welcome to signup wizard" --add-entry "Enter the first name" --add-entry "Enter the last name" --add-entry "Enter login name" --add-password "Enter password"

输入值的默认分隔符是 "|"
象征。 您还可以使用自定义分隔符 --separator
旗帜。

10.进度对话框
要访问进度条对话框支持的选项列表,请运行以下命令:
$ zenity --help-progress
采用 --progress
标志以创建进度条。 为了创建进度条,您必须了解它是如何工作的。 应从您这边提供两个输入。
- 仅包含数字的行
echo
命令将被视为进度的百分比。 - 以 开头的行
#
中的符号echo
命令将作为进度消息打印。
( echo 10 echo "# Updating repository Index" sleep 5 echo 15 echo "# Reading input files" sleep 5 echo 70 echo "# Installing packages..." sleep 5 echo 100 echo "# Package Installation completed!" ) | zenity --title "Package Installation Progress Bar" --progress --auto-close

进度条完成后,您可以自动制作一个对话框 close 使用 –auto-close 旗帜。
11. 列表对话框
要访问列表对话框的支持选项列表,请运行以下命令:
$ zenity --help-list
列表对话框允许您创建行和列的列表。 采用 --list
标志创建列表对话框和 --column
添加列的标志。
$ zenity --list --column "Player" --column "Club" --column "Country" Messi PSG Argentina Neymar PSG Brazil Ronaldo Manu Portugal

看看上面的 example. 使用 --column
标志,我创建了三列。 创建列后,您可以在下一行中输入值,这些值将显示为每一行,就像我在上图中所做的那样。
在第一列中,可以创建复选框或单选按钮。 要创建单选按钮,请使用 --radiolist
标记并创建一个复选框,使用 --checklist
旗帜。 创建电台列表时,必须添加 真的 或者 错误的 关键字作为行的第一个值。 True 将选择单选列表或复选框,而 false 将不选中该框。
zenity --list --checklist --column "checkbox" --column "Player" --column "Club" --column "Country" FALSE Messi PSG Argentina FALSE Neymar PSG Brazil FALSE Ronaldo Manu Portugal

当您选择行并单击确定时,该值将打印到终端(|
) 作为分隔符。 默认情况下,只有第一列打印到终端。 要打印整行,请通过 --print-column ALL
.
结论
我们已经到了文章的结尾。 我已经简要解释了 zenity 是什么以及可以使用的不同小部件。 您可能并不总是需要 GUI 实用程序。 但是,当您需要图形 GTK+ 小部件时 bash 脚本,Zenity 将在其他 GUI 工具中派上用场。
资源:
Bash 脚本指南:
- Bash 脚本 – 案例陈述
- Bash 脚本 – 条件语句
- Bash 脚本 – 字符串操作
- Bash 脚本 – Printf 命令用示例解释
- Bash 脚本——用示例解释索引数组
- Bash 脚本——用示例解释的关联数组
- Bash 脚本——用例子解释 For 循环
- Bash 脚本 – While 和 until 循环用示例解释
- 用示例解释 Bash 重定向
- Bash 脚本——用例子解释的变量
- Bash 脚本——用例子解释的函数
- 用 Linux 中的示例解释 Bash Echo 命令
- Bash Heredoc 初学者教程