如果我在 Bash 中创建一个菜单,则命令样式历史记录可能
If I create a menu in Bash is command style history possible
我创建菜单没问题 - 这不是这个问题的问题。
然而发生的事情是我从让箭头键有用(上下滚动以访问我在命令行 运行 之前的命令)到完全没用(^[[A^[[A^[[A^[[B^[[C^[[D^[[C
)
有什么方法可以将该行为封装到菜单中吗?
例如我可以使用向上和向下滚动键来访问我之前选择的选项吗? (这是一个大菜单,我有很多选项,例如 dev.client.alpha
或 dev.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
我创建菜单没问题 - 这不是这个问题的问题。
然而发生的事情是我从让箭头键有用(上下滚动以访问我在命令行 运行 之前的命令)到完全没用(^[[A^[[A^[[A^[[B^[[C^[[D^[[C
)
有什么方法可以将该行为封装到菜单中吗?
例如我可以使用向上和向下滚动键来访问我之前选择的选项吗? (这是一个大菜单,我有很多选项,例如 dev.client.alpha
或 dev.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