Answers:
有一种使用方法 zenity
zenity --question --text "Are you sure?"
您可以使用$?
变量测试该命令的退出状态,如下所示:if [ $? -eq 1 ];then exit 1 ; fi
。0
是OK
,1
被取消。如果您以后需要测试弹出窗口的退出状态,则可以很好地使用此构造,也许可以$?
在弹出窗口退出到变量之后立即进行存储。如评论中所讨论的,波纹管之类的结构也将起作用:
if zenity --question --text "Are you sure"
then
runSumeFunction
else
exit 1
fi
要么
zenity --question --text "Are you sure?" || echo "User isn't sure:/"
您可以xmessage
在脚本本身中使用。在“ shebang”之后放这样的东西:
xmessage "Are you sure?"
这将显示图形消息“您确定吗?” 使用“确定”按钮。
您可以配置xmessage
多个按钮,并更改其中的内容。您还可以配置每个按钮执行的操作。
例如,
xmessage -buttons ok:0,cancel:1 "Are you sure?"
请参阅man xmessage
所有选项(其中有很多)。
除了告诉您如何操作外,我将告诉您您不应该这样做。
TL; DR-请勿更改脚本。而是配置您的文件管理器或弄清楚为什么用户意外运行它。
编辑:您似乎将您的脚本视为某种特殊,好像常规设置不够好,并且您的脚本需要用户的特殊确认。双击它是确认。如果发现用户无意中运行了它,则必须弄清楚他们为什么这样做并解决该问题。那么,您真正的问题不是如何要求确认,而是如何防止用户意外运行它。
从暴露问题的方式看,您似乎希望通过导航到文件所在的位置,然后从文件管理器中单击它来运行程序(脚本)。考虑一下系统中的所有其他程序。你从几开始呢?/usr/local/bin
启动Firefox时,您是否导航到?你当然不会。您从应用程序菜单上单击它。(gnome tweak是一个python脚本,也许是一个更好的例子)
希望您不会考虑从应用程序菜单中单击它而导致事故。因此,您的问题就变成了如何使脚本显示在此处而不是使用文件管理器。为此,您需要执行以下操作:
将脚本远离用户可能会意外单击的其他文件(典型的位置是/usr/local/bin/
用于系统范围的安装或~/.local/bin/
用户安装)
创建一个Desktop Entry文件(阅读标准规范)。这是一个最小的情况:
[Desktop Entry]
Name=Your script name
Exec=path/for/your/script
Icon=path/for/your/icon/can/be/svg
Terminal=false
Type=Application
并将其推入/usr/local/share/applications/your-script.xml
或~/.local/share/your-script.xml
。
终于跑了update-desktop-database
。
由于您双击脚本,因此文件管理器的工作是确认这一点。确认脚本是否应该运行不是脚本的工作。将此发挥到极致。您能想象每次调用任何程序来确认它会多么荒谬吗?
程序要求进行确认的唯一时间是它即将执行可能危险且不可逆的操作时。例如,覆盖文件或绕过垃圾桶。请注意,即使是这些示例,都是关于使程序执行特定的操作。他们不是要启动这样的程序。如果程序的唯一目的是做这种危险的事情,那么它也不应该要求确认。
实际上,默认情况下,Nautilus(Gnome文件管理器)已经要求您确认是否要执行脚本(或只是在文本编辑器中打开它)。
当然,此行为是可配置的,从而使用户可以将其关闭(请注意“ 可执行文本文件”上的条目)。
因此,请勿在脚本中添加烦人的确认对话框。正确配置文件管理器。并让您的用户做同样的事情。
您可以使用yad,就像在类固醇上的zenity一样,因为它的可配置性要高得多。您可以从Ubuntu的软件中心进行安装。您可以输入最基本的形式
yad --title=Question --image=dialog-question --text="Are you sure?"
如果按“确定”,则返回码为0;如果按“取消”,则返回码为1。
最好将框放在中间并调整其宽度,使用前导标签将文本“您确定吗?” 更右边,也总是放在最前面。为此,我们需要:
yad --center --on-top --title=Question --image=dialog-question --text="\tAre you sure?" --width 200
除了“您确定吗?”之前的“ \ t”之外,大多数开关都是不言自明的。只需在打印文本之前添加一个制表符空间。现在我们应该看到:
盒子居中,总是在顶部,看起来更好。要设置变量以测试按下哪个按钮,请使用:
yad --center --on-top --title=Question --image=dialog-question --text="\tAre you sure?" --width 200;result=$?;echo $result
在此示例中,我们使用变量$ result,如果按下OK键,则将其设置为0;如果按下Cancel键,则将其设置为1。
对于yad的帮助,您可以使用man yad
或,yad --help-all
但是我发现实际示例更容易适应。有一些在这里。在我看来,yad比zenity更可配置,因此更有用。
if zenity...
或zenity... || exit