我正在尝试构建一个简单的 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
框中显示整数。有什么想法吗?
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