Har*_*rry 7 bash history interactive
我正在实现一个类似于MySQL客户端的交互式bash脚本/usr/bin/mysql
.在这个脚本中,我需要发出各种类型的"命令".我还需要提供一种历史机制,用户可以使用上/下箭头键滚动到目前为止输入的命令.
此处列出的代码段(示例15-6,检测箭头键)并不完全符合我的要求.我真的想要以下内容:
上/下箭头键应以静音模式运行.意思是,它们不应该在终端上回显它们的字符代码.
但是,其他键(用于读取命令名称及其参数)不能以静默方式运行.
问题read -s -n3
在于,它不能满足我的静音模式和回声模式的同时冲突要求,仅基于字符代码.此外,该值-n3
将适用于箭头键,但对于其他/常规键,它将不会"返回控制"到调用程序,直到消耗了3个字符.
现在,我可以尝试-n1
手动组装输入,一次一个字符(哎呀!).但基于字符代码的静音/回声模式切换问题仍然存在!
有没有人在bash中尝试过这个东西?(注意:我不能使用C,也不能使用其他脚本语言,如Perl,Python等)
编辑
继续Dennis的回答......您还需要手动将所需的条目添加到您的历史记录中history -s
,如此...
while read -e x; do
history -s "$x"
# ...
done
Run Code Online (Sandbox Code Playgroud)
您可以使用read -e
来read
使用readline
。它将处理您的光标键并为您保留历史记录。您还需要通过手动将所需条目添加到历史记录中history -s
,如下所示:
while read -e x; do
history -s "$x"
# ...
done
Run Code Online (Sandbox Code Playgroud)