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


151

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

到目前为止,唯一需要输入的是sudo的密码-gksudo可以很好地处理。但是我还没有找到显示消息框的简便方法。有某种类型的“ gkmessage”命令可用吗?我希望默认的Ubuntu安装中包含某些内容,但是如果有必要,我不介意安装新软件包。


Answers:


143

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


4
zenity --help不是那么有用。为了使此功能有用,您需要确保设置--text=My text here为使其显示某些内容……
Stephen

10
例如zenity --info --text="Calculation complete"
Craig McQueen 2013年

3
@Stephen,出于某种奇怪的原因,正确的命令是zenity --help-all
GKFX 2014年

3
我不喜欢需要打开显示器以打印帮助消息的程序...
thoni56 '16

.xinitrc启动xorg服务器时,我使用此方法显示警告或错误。否则错误将是透明的。我也更喜欢这种方式zenitykdialog因为KDE尚未启动,而且GTK库更轻巧。
cmevoli

152

如果您使用的是Ubuntu许多发行版,则该notify-send命令将在右上角抛出这些不错的易腐通知之一。像这样:

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

美丽!


2
这也适用于Fedora。我非常确定任何Linux发行版都可以做到这一点。
kmatheny

4
在Raspbian GNU / Linux 7上不起作用。是否需要安装软件包?
卡尔·韦尔贝斯特,2015年

1
在debian仓库中:apt-cache search notify-osd @carlverbiest
圣诞老人

2
至少在Ubuntu 14.04中,如果使用超时0调用notify-send,例如“ notify-send -t 0'hi there!'”,您将得到一个不会过期的弹出对话框。
vancan1ty

在Debian Jessie中,libnotify-bin软件包包含notify-send二进制文件。Gnome3似乎不是必需的,notify-osd但我猜想其他桌面环境可能还需要libnotify-bin
Jasen

78

每个人都提到禅意,似乎还有很多其他人。混杂但有趣的列表位于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它非常老,因此很稳定,并且可能在所有使用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

对话

(未测试)

在PPA中

YAD:在类固醇上的Zenity [从Shell脚本显示图形对话框]〜Web Upd8:Ubuntu / Linux博客。似乎无法自动调整对话框大小。

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标准存储库中的文件

  • Shellgui
  • 对话
  • gtk对话

离题(用于终端)

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

随时编辑。



@ThorSummoner感谢您的提示。对于感兴趣的读者,不同之处在于whiptail --infobox(在支持备用屏幕的终端上无法正常工作)返回时没有等待用户输入,而whiptail --msgbox(有效果)则在退出之前等待用户确认。
斯特凡纳·古里科

我记得当时对msgbox不满意,出于我的目的,我认为我需要在日志或类似内容中查看输出;
ThorSummoner

有很多选择!非常好的例子
artu-hnrq

49

zenity应用程序似乎是你在找什么。

要从zenity输入,您可以指定一个变量并将zenity --entry的输出保存到该变量。看起来像这样:

my_variable=$(zenity --entry)

如果您查看my_variable中的值,它将是在zenity弹出输入对话框中键入的值。

如果要提示用户(或您)应在对话框中输入什么内容,请添加--text开关并添加所需的标签。看起来像这样:

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

Zenity还有许多其他针对特定任务的不错的选项,因此您可能也想通过zenity --help来检查那些选项。一个示例是--calendar选项,您可以从图形日历中选择一个日期。

my_date=$(zenity --calendar)

根据用户点击的内容,它给出了格式正确的日期:

echo ${my_date}

给出:

2009/08/05

滑块选择器,错误,列表等还有一些选项。

希望这可以帮助。


我可以看到zentity看起来很酷。但是它不是Ubuntu 12.04的一部分,所以我gxmessage改用了。
Peter V.Mørch2014年


8

这是一个小的Tcl脚本,可以执行您想要的操作。Wish解释器应默认安装在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"`

7

alertnotify-send似乎是同样的事情。我用notify-send非输入消息,因为它不会占用焦点,并且我无法找到阻止禅定性的方法。

例如

# 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"

6

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


5

如果没有其他东西。您可以启动xterm并在其中回显,如下所示:

 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);'

3

Ubuntu的alert怎么样?操作完成后可以使用它来提醒它完成,甚至在操作符完成错误时显示红叉图标

ls -la; alert


0

Kdialog和对话都很好,但是我建议Zenity。快速,轻松,更好地查看xmessage或对话框。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.