如果我在 Bash 中创建一个菜单,则命令样式历史记录可能

If I create a menu in Bash is command style history possible

我创建菜单没问题 - 这不是这个问题的问题。

然而发生的事情是我从让箭头键有用(上下滚动以访问我在命令行 运行 之前的命令)到完全没用(^[[A^[[A^[[A^[[B^[[C^[[D^[[C)

有什么方法可以将该行为封装到菜单中吗?

例如我可以使用向上和向下滚动键来访问我之前选择的选项吗? (这是一个大菜单,我有很多选项,例如 dev.client.alphadev.otherclient.beta 等...)

我想我可以将每个文件分解成单独的文件,然后直接使用命令行,或者我可以将扩充传递给菜单,以便直接从命令行调用:~/menu dev.clint.alpha

只是好奇是否还有其他人有过这种痒感,是否有人对此做过任何治疗?

我目前使用的菜单基本上是这样的:

while :
   clear
   do
    echo "$MENU"
    read CHOICE ARG1 ARG2 ARG3 ARG4 overflow
    case $CHOICE in
        command.a)
            # do stuff here
            ;;
        command.b)
            # do different stuff here
            ;;
        *) # catch all...
            continue 
            ;;
        esac
    done
clear

您可以通过在阅读中启用 readline 来做您想做的事, 并将每个选择回复附加到内部历史记录。你甚至可以节省 历史到一个文件,所以当你重新运行脚本时,你有旧的 历史。例如:

HISTFILE=/tmp/myhistory
history -r # read old history
while :
do  echo "MENU. a b q"
    read -e # sets REPLY, enables readline
    history -s "$REPLY" # add to history
    history -w # save to file
    set -- $REPLY
    CHOICE=; shift
    ARG1= ARG2= ARG3= ARG4=; shift 4
    overflow="$*"
    case $CHOICE in
        a) echo do stuff here $ARG1 ;;
        b) echo do different stuff here ;;
        q) exit ;;
        *) echo catch all...
            continue ;;
    esac
done