我正在 Ubuntu linux 下编写一些 bash 脚本。我希望能够从 GUI 运行它们,而不需要终端窗口来输入任何输入或查看任何输出。
到目前为止,唯一需要的输入是 sudo 的密码—— gksudo 可以很好地处理这个问题。 但是我还没有找到一个简单的方法来显示一个消息框。是否有某种“ gkmessage”命令可用?我更喜欢默认 Ubuntu 安装中的一些东西,但是如果有必要的话,我不介意安装一个新的软件包。
我找到了 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 版本 kdialog。dialog由 slackware 使用,因此它可能不会立即在其他发行版上可用。
dialog
kdialog
对话框和对话框都不错,但我建议使用 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
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 "my text"
xmessage非常古老,因此它很稳定,可能在所有使用 X 的发行版中都可用(因为它是与 X 一起发行的)。它可以通过 X 资源进行定制,对于那些已经使用 Linux 或 Unix 足够长时间,知道它意味着什么的人(.Xdefaults,有人知道吗?).
xmessage
.Xdefaults
xmessage -buttons Ok:0,"Not sure":1,Cancel:2 -default Ok -nearmouse "Is xmessage enough for the job ?" -timeout 10
kdialog --error "Some error occurred"
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"
whiptail --msgbox "my text" 10 20 dialog --msgbox "my text" 10 20
随便编辑。
Ubuntu 的 警报怎么样。它可以在任何操作完成后使用,以提醒它完成,甚至显示红色交叉图标,如果操作完成与错误
ls -la; alert
alert和 notify-send看起来是一样的。我使用 notify-send的非输入消息,因为它不偷焦点,我不能找到一个方法来停止 zenity 等这样做。
alert
例如:。
# 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
如果在框中输入“ Steve”并按 run,输出将为
Hello Steve
披露: 我是 Shellmarks 的作者
我喜欢我看到的 脚本对话框。它符合我所有的条件,还有一些:
实际上,它是一个包装 kDialogue、 zenity、 Dialogue、 whiptail 和自定义备份的包装器。
缺点是它没有 CLI,而是作为 bash 脚本的源代码。