在执行脚本之前要求用户确认?

may*_*ani 8 scripts

当我执行脚本(双击)时,有没有办法获得用户确认(比如你确定是/否)类型对话框?我的意思不是在终端中,而是一个图形确认框,如下所示: 在此处输入图片说明

(我知道图像来自 Windows,我找不到 Linux 图像)

Ser*_*nyy 13

有一种使用方法 zenity

zenity --question --text "Are you sure?"
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

您可以测试与该命令的退出状态$?变量,是这样的:if [ $? -eq 1 ];then exit 1 ; fi0OK1是取消。如果您稍后需要测试弹出窗口的退出状态,则此构造将运行良好,可能会$?在弹出窗口退出后立即存储到变量。正如评论中所讨论的,像波纹管这样的结构也可以工作:

if zenity --question --text "Are you sure" 
then
     runSumeFunction
else
     exit 1
 fi
Run Code Online (Sandbox Code Playgroud)

或者

 zenity --question --text "Are you sure?" || echo "User isn't sure:/"
Run Code Online (Sandbox Code Playgroud)

  • 你不需要方括号。只需执行`if zenity...` 或`zenity... || 退出` (2认同)
  • 对我来说,通过以下方式测试程序的退出状态似乎很愚蠢……将其退出状态提供给另一个程序(或内置 shell),然后测试它的退出状态。 (2认同)

Edu*_*ola 6

您可以xmessage在脚本本身中使用。在“shebang”后面放上这样的东西:

xmessage "Are you sure?"

这将显示一条图形消息,说“你确定吗?” 带有“确定”按钮。

您可以配置xmessage为具有多个按钮并更改其中的内容。您还可以配置每个按钮完成的操作。

例如,

xmessage -buttons ok:0,cancel:1 "Are you sure?"  
Run Code Online (Sandbox Code Playgroud)

查看man xmessage所有选项(有很多)。


car*_*aug 5

我不会告诉你怎么做,而是告诉你你不应该那样做。

TL;DR - 不要改变你的脚本。而是配置您的文件管理器或找出您的用户意外运行它的原因。

编辑:您似乎将您的脚本视为某种特殊的,好像一般设置不够好并且您的脚本需要用户的特殊确认。双击它确认。如果您发现您的用户不小心运行了它,那么您必须弄清楚他们为什么这样做并解决它。那么您真正的问题不是如何要求确认,而是如何防止您的用户意外运行它。

从您暴露问题的方式来看,您似乎希望通过导航到文件所在的位置,然后从文件管理器单击它来运行您的程序(脚本)。想想您系统中的所有其他程序。有多少是这样开始的?您/usr/local/bin在启动 Firefox 时导航到吗?你当然没有。您可以从应用程序菜单中单击它。(gnome 调整是一个 python 脚本,也许这是一个更好的例子)

希望您不会认为从应用程序菜单中单击它是一种意外。所以你的问题变成了如何让你的脚本出现在那里而不是使用文件管理器。为此,您需要执行以下操作:

  1. 将您的脚本远离用户可能会意外点击的其他文件(典型的位置是/usr/local/bin/用于系统范围的安装或~/.local/bin/用户安装)

  2. 创建桌面条目文件(阅读标准规范)。这是一个最小的案例:

    [Desktop Entry]
    Name=Your script name
    Exec=path/for/your/script
    Icon=path/for/your/icon/can/be/svg
    Terminal=false
    Type=Application
    
    Run Code Online (Sandbox Code Playgroud)

    并将其推入/usr/local/share/applications/your-script.xml~/.local/share/your-script.xml

  3. 最后运行update-desktop-database


由于您正在双击脚本,因此确认这一点是您的文件管理器的工作。脚本的工作不是确认它是否应该运行。把这个发挥到极致。你能想象每次调用任何程序时都必须确认它是多么荒谬吗?

程序应该要求确认的唯一时间是当它即将做一些可能危险且不可逆转的事情时。例如,覆盖文件或绕过垃圾箱。请注意,即使是这些示例也是关于让程序做一些特定的事情。他们不是要启动这样的程序。如果一个程序的唯一目的就是做这种危险的事情,那么它也不应该要求确认。

事实上,Nautilus(Gnome 文件管理器)已经默认要求您确认是否要执行脚本(或只是在文本编辑器中打开它)。

Nautilus 确认对话框

当然,这种行为是可配置的,让用户可以将其关闭(请注意Executable Text Files上的条目)。

Nautilus 首选项菜单 - 行为选项卡

所以不要在你的脚本中添加烦人的确认对话框。正确配置文件管理器。让您的用户也这样做。