首页 > 解决方案 > 捕获嵌入在 bash 函数中的对话框调用的结果

问题描述

我想dialog从 bash 的通用函数中调用 unix 编辑框。我感兴趣的两个结果是:

  1. 如果用户点击确定,我想捕捉用户在编辑框中输入的内容
  2. 检测用户是否点击取消

这是我的一些代码,但我不确定这是否是最好的方法:

function ib_generic()
{
    tmp_file="/tmp/file.tmp"
    if [ -f $tmp_file ]
    then
    rm -f $tmp_file
    fi
    
    mkfifo $tmp_file

    # push the user input to $tmp_file
    dialog --stdout \
    --title "$1" \
    --backtitle  "My Backtitle" \
    --inputbox "$2" 20 40 2> $tmp_file &

    # detect 'cancel' or 'escape':
    if [[ $? -eq 0 || $? -eq 255 ]] 
    then
        rm -f $tmp_file
        echo 1
    else # 'ok' was pressed so proceed:
        result="$( cat /tmp/file.tmp )"
        rm -f $tmp_file
        echo $result
    fi
}

如果点击 OK,取消结果的最佳方法是什么,如果没有,如何检测 Cancel 或 Escape?

标签: bashdialog

解决方案


不要dialog在后台运行,因为它不会等待它完成并且不会设置$?.

您也有错误的退出状态。0手段OK被按下,1手段Cancel,和255手段Escape

dialog --stdout \
    --title "$1" \
    --backtitle  "My Backtitle" \
    --inputbox "$2" 20 40 2> "$tmp_file"

exit=$?
if [ $exit -eq 0 ] # OK was pressed
then
    echo "$result"
elif [ $exit -eq 1 ] || [ $exit -eq 255 ] # Cancel or Escape was pressed
then
    echo 1
else
    echo 2
fi

这里有一个更完整的例子


推荐阅读