Bash 对话框:如何链接小部件,将数据从一个小部件传递到下一个小部件?

问题描述 投票:0回答:1

我正在尝试构建一个简单的 dialog,其中要求用户做出选择(使用

menu
小部件),然后确认它(使用
yesno
小部件)。需要单独确认(无论如何都是首选),因为任何以下操作都会格式化您的磁盘,这可能会导致投诉。

链接小部件很容易,但将菜单中的选择传递到下游小部件却并非易事。谁能建议一种方法来做到这一点?在这次尝试中,

menu
输出转到fd 3(
--output-fd
不会采用管道名称),并且我尝试读取第二个小部件的fd 3:

#!/bin/bash

exec 3<> /tmp/fubar
confirm=$(cat /dev/fd/3 &)

res=$(dialog --clear \
       --output-fd 3 \
       --backtitle "Backtitle"  \
       --title "Title" \
       --menu "Please select:" 15 30 4 \
       "1" "Foo" \
       "2" "Bar" \
       --clear   \
       --stderr  \
       --yesno "$confirm" 15 30 \
       2>&1 >/dev/tty)

这当然行不通,尤其是因为

$confirm
提前扩展了。我还需要构建一个确认字符串,而不是仅在
yesno
框中显示整数。有什么想法吗?

bash dialog
1个回答
0
投票

保持简单愚蠢

dialog --clear \
       --output-fd 1 \
       --backtitle "Backtitle"  \
       --title "Title" \
       --menu "Please select:" 15 30 4 \
       "1" "Foo" \
       "2" "Bar" \
       --clear   \
       --stderr  \
       --yesno "$confirm" 15 30 \
       > /tmp/temp_$$

case $(</tmp/temp_$$) in
    1) echo yes ;;
    2) echo no  ;;
    *) echo >&2 ERR; exit 1 ;;
esac
© www.soinside.com 2019 - 2024. All rights reserved.