linux - 如果我在 Bash 中创建一个菜单,命令样式历史是可能的

标签 linux bash shell menu

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

但是发生的事情是,我从让箭头键有用(上下滚动以访问我在命令行运行的先前命令)到完全无用(^[[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=$1; shift
    ARG1=$1 ARG2=$2 ARG3=$3 ARG4=$4; 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

关于linux - 如果我在 Bash 中创建一个菜单,命令样式历史是可能的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31140336/

相关文章:

python - 将最后三行python输出分配给bash中的3个变量

linux - 使用sed脚本扩展环境变量

macos - 如何列出 OS X 中正在运行的程序的所有窗口标题?

linux - 如何按列值分组到行和列标题中,然后对值求和

linux - grep 匹配后的词 + 制表符

linux - 无法发出方法调用 : Unit squid. 服务无法加载:没有这样的文件或目录

android - 打开/proc/<PID>/stat 文件时权限被拒绝错误

linux - 在中间节点重新组装 IP

bash - 使用 join 进行笛卡尔积

ruby - 如何编写在不同系统上运行的 ruby​​ 脚本