如何在 linux 中显示 bash 脚本的 GUI 消息框?

我正在 Ubuntu linux 下编写一些 bash 脚本。我希望能够从 GUI 运行它们,而不需要终端窗口来输入任何输入或查看任何输出。

到目前为止,唯一需要的输入是 sudo 的密码—— gksudo 可以很好地处理这个问题。 但是我还没有找到一个简单的方法来显示一个消息框。是否有某种“ gkmessage”命令可用?我更喜欢默认 Ubuntu 安装中的一些东西,但是如果有必要的话,我不介意安装一个新的软件包。

202948 次浏览

我找到了 Xmessage命令,这个命令已经足够好了。

这里有一个小的 Tcl 脚本,将做你想要的。默认情况下,Ubuntu 上应该安装许愿解释器。

#!/usr/bin/wish
pack [label .msg -text [lindex $argv 0]]
pack [entry .ent]
bind .ent <KeyPress-Return> { puts [.ent get]; destroy . }
focus .ent

这么说吧:

myanswer=`gui-prompt "type your answer and press enter"`

我相信 Zenity会做你想做的。它是专门为从命令行显示 GTK 对话框而设计的,它可以作为 Ubuntu 包使用。

还有 dialog和 KDE 版本 kdialogdialog由 slackware 使用,因此它可能不会立即在其他发行版上可用。

对话框和对话框都不错,但我建议使用 Zenity。

Zenity 确实是我认为您正在寻找的工具。

或者

zenity --help

Zenity应用程序似乎就是您要寻找的。

要从 Zenity获取输入,可以指定一个变量并将 Zenity 进入的输出保存到该变量中。它看起来像这样:

my_variable=$(zenity --entry)

如果您现在查看 我的 _ 变量中的值,它将是在 zenity 弹出输入对话框中输入的任何值。

如果您想提示用户(或者您)应该在对话框中输入什么内容,请添加带有所需标签的 短信开关。它看起来像这样:

my_variable=$(zenity --entry --text="What's my variable:")

Zenity 还有许多其他适用于特定任务的不错的选项,所以您可能需要使用 Zenity ——救命检查这些选项。一个例子是 日历选项,它允许您从图形日历中选择一个日期。

my_date=$(zenity --calendar)

它根据用户点击的内容提供了一个格式很好的日期:

echo ${my_date}

提供:

08/05/2009

还有滑块选择器、错误、列表等选项。

希望这个能帮上忙。

在许多 Linux 发行版中,notify-send命令会在右上角抛出一个容易过期的通知。像这样:

notify-send "My name is bash and I rock da house"

漂亮!

每个人都提到 zenity,似乎还有很多其他的。一个混合但有趣的名单是在 http://alternativeto.net/software/zenity/

首先,一个具有文本格式标记,窗口标题,按钮标签 zenity 的例子。

zenity \
--info \
--text="<span size=\"xx-large\">Time is $(date +%Hh%M).</span>\n\nGet your <b>coffee</b>." \
--title="Coffee time" \
--ok-label="Sip"

Gxmessage

gxmessage "my text"

Xmessage

xmessage非常古老,因此它很稳定,可能在所有使用 X 的发行版中都可用(因为它是与 X 一起发行的)。它可以通过 X 资源进行定制,对于那些已经使用 Linux 或 Unix 足够长时间,知道它意味着什么的人(.Xdefaults,有人知道吗?).

xmessage -buttons Ok:0,"Not sure":1,Cancel:2 -default Ok -nearmouse "Is xmessage enough for the job ?" -timeout 10

K 对话框(KDE 工具)

kdialog --error "Some error occurred"

在 PPA 里

YAD: Zenity On Steroid [ Display Graphical Dialogs From Shell Scripts ] ~ Web Upd8: Ubuntu/Linux blog .似乎不能自动调整对话框的大小。

echo My text | yad \
--text-info \
--width=400 \
--height=200

一个更大的例子

yad \
--title="Desktop entry editor" \
--text="Simple desktop entry editor" \
--form \
--field="Type:CB" \
--field="Name" \
--field="Generic name" \
--field="Comment" \
--field="Command:FL" \
--field="Icon" \
--field="In terminal:CHK" \
--field="Startup notify:CHK" "Application" "Name" "Generic name" "This is the comment" "/usr/bin/yad" "yad" FALSE TRUE \
--button="WebUpd8:2" \
--button="gtk-ok:0" \
--button="gtk-cancel:1"

其他不在 Ubuntu 标准仓库中的

  • 贝壳
  • 对话框
  • 对话框

跑题(用于终端)

whiptail --msgbox "my text" 10 20
dialog --msgbox "my text" 10 20

随便编辑。

Ubuntu 的 警报怎么样。它可以在任何操作完成后使用,以提醒它完成,甚至显示红色交叉图标,如果操作完成与错误

ls -la; alert

alertnotify-send看起来是一样的。我使用 notify-send的非输入消息,因为它不偷焦点,我不能找到一个方法来停止 zenity 等这样做。

例如:。

# This will display message and then disappear after a delay:
notify-send "job complete"


# This will display message and stay on-screen until clicked:
notify-send -u critical "job complete"

如果没有其他内容,可以在其中启动 xterm 和 echo,如下所示:

 xterm -e bash -c 'echo "this is the message";echo;echo -n "press enter to continue "; stty sane -echo;answer=$( while ! head -c 1;do true ;done);'

您可以在运行 shell 脚本之前使用 弹痕显示 GUI 对话框,这将允许用户输入将放置在环境中的数据。

#!/bin/bash
echo "Hello ${name}"
exit 0
---
[name]
type="text"
label="Please enter your name"
required=true

剧本:

shellmarks hello.sh

Shellmarks dialog

如果在框中输入“ Steve”并按 run,输出将为

Hello Steve

披露: 我是 Shellmarks 的作者

我喜欢我看到的 脚本对话框。它符合我所有的条件,还有一些:

  • 弹出图形用户界面框,但有文本模式备用
  • 支持各种 sudo 变体(gksudo,kde-sudo,...)
  • 可以在终端窗口重新启动自己

实际上,它是一个包装 kDialogue、 zenity、 Dialogue、 whiptail 和自定义备份的包装器。

缺点是它没有 CLI,而是作为 bash 脚本的源代码。