我正在用对话框测试一些东西。当我通过 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