【问题标题】:Pressing no or cancel on zenity dialog exits script在 zenity 对话框上按 no 或 cancel 退出脚本
【发布时间】:2019-12-09 11:36:14
【问题描述】:

我正在编写一个打开一堆程序的脚本。但是,有时我只想打开一些程序,所以我使用 zenity 问题对话框来询问是否应该打开每个程序。

    zenity --question --text "Start Firefox?"
    start_firefox=$?
    if [[ $start_firefox -eq 1 ]]; then
        # opens Firefox...
    fi
    zenity --question --text "Open Dolphin?"
    open_dolphin=$?
    if [[ $open_dolphin -eq 0 ]]; then
        directory=$(zenity --file-selection --directory)
        # continues to open Dolphin...
    fi
    zenity --question --text "Open gedit?"
    open_gedit=$?
    if [[ $open_gedit -eq 0 ]]; then
        # opens gedit...
    fi

这里的问题是,如果我在任何问题上单击“否”,或在文件选择器上单击“取消”,它将退出整个脚本,我什至无法收集 zenity 对话框的返回值。如果我在 bash shell 中键入相同的代码,它就可以正常工作。

【问题讨论】:

    标签: bash zenity


    【解决方案1】:

    在打开任何 zenity 对话框之前,我必须输入命令 set +e。这是因为 bash 脚本在命令返回非零退出代码时退出,它认为这是失败的。如果用户单击是,则 zenity 问题返回 0,如果用户单击否,则返回 1。由于 1 是一个非零退出代码,bash 认为该命令失败,并终止了整个脚本。

    上面的命令所做的是不要在任何非零退出状态下停止脚本,它的副作用是其他失败的命令也不会退出脚本,所以使用小心。

    另见问题Automatic exit from bash shell script on error

    【讨论】:

    • The default behavior of bash is set -e”。我不这么认为。您是否有任何消息来源表明 set -e 是默认值?
    • @Socowi 由于 bash 信息页没有说明这一点,我查看了 bash sources,事实上,我发现这不是默认值。
    • @Zenul_Abidin :您可以通过echo $- 查看哪些选项有效。除非您明确设置了-e(例如在您的.bashrc 中),否则e 不会出现在列表中。
    猜你喜欢
    • 2018-07-20
    • 2011-08-01
    • 2014-02-26
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多