是否可以将命令作为变量传递给 --dialog 脚本?

是否可以将命令作为变量传递给 --dialog 脚本?

目前,我有以下对话框函数,我正在尝试将其制作成可重用的是/否提示,我可以使用 YesNoPrompt 调用它,后跟它需要的变量。

该函数如下所示:

function YesNoPrompt {
    dialog --begin 2 1 --no-shadow --title "$1" --hline "$2" \
        --backtitle "$3" --yes-label $4 --no-label $5 \
        --yesno "$6" 26 38 20>&1 > /dev/tty \
        || exit
    sudo reboot 
}

并被这样称呼:

YesNoPrompt "TITLE" "HLINE" "BACKGROUND TEXT" "YES" "NO" "MAIN MESSAGE"

它工作得很好,但我还希望能够向它传递选项,这些选项将决定如果用户选择“是”或“否”而不是该功能当前具有的硬编码退出和重新启动会发生什么。

有办法做到这一点吗?

任何想法将不胜感激。

答案1

dialog如果进程以非零退出状态退出,下面的函数将执行参数 7 中的命令;否则——如果dialog成功退出——该函数将执行参数 8 中的命令。

function YesNoPrompt {
    if ! dialog --begin 2 1 --no-shadow --title "$1" --hline "$2" \
        --backtitle "$3" --yes-label "$4" --no-label "$5" \
        --yesno "$6" 26 38 20>&1 > /dev/tty
    then
      eval "$7"
    else
      eval "$8"
    fi
}

我将逻辑重新设计成||一个完整的if/then/else陈述;否则,您的替换exit(如果没有exitreturn)可能允许后续sudo reboot(或替换)执行。大概您只想执行一个或另一个命令。我还引用了所有参数。

eval如果您想传递多个单词作为命令(例如sudo reboot),则 是必需的。请注意,这eval会导致参数经历另一轮 shell 解释,因此请注意通配符或其他扩展等内容。

相关内容