如何在Linux中显示一个bash脚本的GUI消息框?
我正在Ubuntu linux下编写一些bash脚本。 我希望能够从GUI运行它们,而不需要terminal窗口input任何input或查看任何输出。
到目前为止,唯一需要的input是sudo的密码,而gksudo可以处理这个问题。 但是,我还没有find一个简单的方法来显示一个消息框呢。 是否有某种'gkmessage'命令可用? 我更喜欢默认的Ubuntu安装,但我不介意安装新的软件包,如果有必要的话。
我相信Zenity会做你想做的事情。 它专门用于从命令行显示GTK对话框,并且可以作为Ubuntu软件包提供 。
如果你使用的是Ubuntu的许多发行版, notify-send
命令会在右上angular扔出一个很好的易腐通知。 像这样:
notify-send "My name is bash and I rock da house"
美丽!
每个人都提到zenity,似乎还有很多其他人。 一个混乱,但有趣的名单是在http://alternativeto.net/software/zenity/
首先,以文本格式标记,窗口标题,button标签为特色的一个例子。
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
kdialog
(未testing)
在PPA中
YAD:对类固醇的Zenity [从Shell脚本显示graphics对话框]〜Web Upd8:Ubuntu / Linux博客 。 似乎没有自动resize的对话框。
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
- xdialog
- gtkdialog
题外(terminal)
whiptail --msgbox "my text" 10 20 dialog --msgbox "my text" 10 20
随意编辑。
该zenity应用程序似乎是你在找什么。
要从zenity获取input,可以指定一个variables,并将zenity –的输出保存到它。 它看起来像这样:
my_variable=$(zenity --entry)
如果您现在查看my_variable中的值,则无论在“zenity”popup式input对话框中input了什么值。
如果你想给出一些提示,用户(或者你)应该在对话框中input什么内容,把–text开关加上你想要的标签。 它看起来像这样:
my_variable=$(zenity --entry --text="What's my variable:")
Zenity有很多其他很好的选项用于特定的任务,所以你可能想用zenity –help来检查。 一个例子是–calendar选项,让你从graphics日历中select一个date。
my_date=$(zenity --calendar)
根据用户点击的内容,可以给出格式良好的date:
echo ${my_date}
得到:
08/05/2009
还有滑块select器,错误,列表等选项。
希望这可以帮助。
我发现了xmessage命令,这足够好。
这里有一个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"`
还有dialog
和KDE版本kdialog
。 dialog
由slackware使用,所以它可能不会立即在其他发行版上可用。
如何Ubuntu的警报 。 可以在任何操作后使用,以提醒它完成,甚至如果operaton被错误结束显示红十字图标
ls -la; alert
alert
和notify-send
似乎是一回事。 我使用notify-send
非input消息,因为它不偷窃焦点,我不能find一种方法来停止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"
Zenity真的是我认为你正在寻找的确切工具。
要么
zenity --help
如果没有其他的东西存在。 你可以启动一个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);'
Kdialog和对话都很好,但是我推荐Zenity。 快速,简单,更好看xmessage或对话框。