对话框 - 执行选择后如何保持在同一行?

对话框 - 执行选择后如何保持在同一行?

我正在用对话框测试一些东西。当我通过 3 执行例如命令时,当它完成后,它会跳回到位置 1。我希望当我在 3 上执行某项操作时,它完成后会停留在 3 上,当我在 2 上执行它时,它停留在 2 上,等等。我该怎么做?提前感谢帮助 :)

这是其中的一部分:

DIALOG_CANCEL=1
DIALOG_ESC=255
HEIGHT=0
WIDTH=0

display_result() {
  dialog --title "$1" \
    --no-collapse \
    --msgbox "$result" 0 0
}

while true; do
  clear
  exec 3>&1
  selection=$(dialog \
    --backtitle "test" \
    --clear \
    --cancel-label "Exit" \
    --menu "Please select:" $HEIGHT $WIDTH 3 \
    "1" "test1" \
    "2" "test2" \
    "3" "test3" \
    2>&1 1>&3)
  exit_status=$?
  exec 3>&-
  case $exit_status in
    $DIALOG_CANCEL)
      clear
      tput cnorm
      exit
      ;;
    $DIALOG_ESC)
      clear
      tput cnorm
      exit
      ;;
    esac
  case $selection in
     1 )
      test1
      ;;
     2 )
      test2
      ;;
     3 )
      test3
      ;;
    esac
done

答案1

您可以dialog通过将之前的选择保存到变量并将其恢复到标志来记住它--default-item string。不支持添加分隔符,但您可以添加空项。

DIALOG_CANCEL=1
DIALOG_ESC=255
HEIGHT=0
WIDTH=0
DEFAULT_ITEM=1

display_result() {
  dialog --title "$1" \
    --no-collapse \
    --msgbox "$result" 0 0
}

while true; do
  clear
  exec 3>&1
  selection=$(dialog \
    --backtitle "test" \
    --clear \
    --cancel-label "Exit" \
    --cr-wrap \
    --no-collapse \
    --default-item "$DEFAULT_ITEM" \
    --menu "Please select:" $HEIGHT $WIDTH 3 \
    "1" "test1" \
    "" "" \
    "2" "test2" \
    "" "" \
    "3" "test3" \
    2>&1 1>&3)
  exit_status=$?
  exec 3>&-
  case $exit_status in
    $DIALOG_CANCEL)
      clear
      tput cnorm
      exit
      ;;
    $DIALOG_ESC)
      clear
      tput cnorm
      exit
      ;;
    esac
  case $selection in
     1 )
      test1
      ;;
     2 )
      test2
      ;;
     3 )
      test3
      ;;
     * )
      continue
      ;;
  esac
  DEFAULT_ITEM="$selection"
done

相关内容