答案1
有一种方法可以使用zenity
zenity --question --text "Are you sure?"
您可以使用$?
变量测试该命令的退出状态,如下所示:if [ $? -eq 1 ];then exit 1 ; fi
. 0
is OK
, 1
is cancel。如果您稍后需要测试弹出窗口的退出状态,此构造将非常有效,也许$?
在弹出窗口退出后立即将其存储到变量中。如评论中所述,像下面这样的结构也将有效:
if zenity --question --text "Are you sure"
then
runSumeFunction
else
exit 1
fi
或者
zenity --question --text "Are you sure?" || echo "User isn't sure:/"
答案2
您可以xmessage
在脚本本身中使用。在“shebang”后面放置类似以下内容:
xmessage "Are you sure?"
这将显示一条图形消息,显示“你确定吗?”并带有一个“确定”按钮。
您可以配置xmessage
多个按钮并更改其中的内容。您还可以配置每个按钮执行的操作。
例如,
xmessage -buttons ok:0,cancel:1 "Are you sure?"
查看man xmessage
所有选项(有很多)。
答案3
我不会告诉你该怎么做,而是会告诉你不应该这么做。
TL;DR - 不要更改您的脚本。而是配置您的文件管理器或弄清楚为什么您的用户会意外运行它。
编辑:您似乎将脚本视为某种特殊情况,好像常规设置不够好,并且脚本需要用户的特殊确认。双击它是确认。如果你发现你的用户意外地运行了它,那么你必须弄清楚他们为什么这样做,并解决这个问题。那么你真正的问题是不是如何要求确认,但如何防止用户意外运行它。
从你暴露问题的方式来看,你似乎希望通过导航到文件所在的位置,然后在文件管理器中单击它来运行程序(脚本)。想想系统中的所有其他程序。你有多少个是那样启动的?/usr/local/bin
启动 Firefox 时你会导航到那里吗?当然不会。你从应用程序菜单中单击它。(gnome tweak 是一个 python 脚本,也许这是一个更好的例子)
希望您不会认为从应用程序菜单中单击它是意外。因此,您的问题变成了如何让脚本出现在那里,而不是使用文件管理器。为此,您需要执行以下操作:
将脚本放置在远离其他文件的地方,以免用户意外点击它(典型的位置是
/usr/local/bin/
系统范围的安装或~/.local/bin/
用户安装)创建桌面条目文件(读取标准规格)。这是一个最小的例子:
[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 文件管理器)默认会要求您确认是否要执行脚本(或者只是在文本编辑器中打开它)。
当然,这种行为是可配置的,用户可以将其关闭(注意输入可执行文本文件)。
因此,不要在脚本中添加烦人的确认对话框。正确配置文件管理器。并让您的用户也这样做。
答案4
你可以使用 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 更具可配置性,因此更加实用。