bash脚本:如何实现自己的历史记录机制?

Har*_*rry 7 bash history interactive

我正在实现一个类似于MySQL客户端的交互式bash脚本/usr/bin/mysql.在这个脚本中,我需要发出各种类型的"命令".我还需要提供一种历史机制,用户可以使用上/下箭头键滚动到目前为止输入的命令.

此处列出的代码段(示例15-6,检测箭头键)并不完全符合我的要求.我真的想要以下内容:

  1. 上/下箭头键应以静音模式运行.意思是,它们不应该在终端上回显它们的字符代码.

  2. 但是,其他键(用于读取命令名称及其参数)不能以静默方式运行.

问题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)

Pau*_*ce. 5

您可以使用read -eread使用readline。它将处理您的光标键并为您保留历史记录。您还需要通过手动将所需条目添加到历史记录中history -s,如下所示:

while read -e x; do
    history -s "$x"
    # ...
done
Run Code Online (Sandbox Code Playgroud)