加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 01:32:51 所属栏目:安全 来源:网络整理
导读:我正在实现类似于 MySQL客户端/usr/bin/mysql的交互式bash脚本.在这个脚本中,我需要发出各种类型的“命令”.我还需要提供一种历史机制,用户可以使用上/下箭头键滚动到目前为止输入的命令. 这里列出的片段(Example 15-6,Detecting the arrow keys)并不完全符
我正在实现类似于 MySQL客户端/usr/bin/mysql的交互式bash脚本.在这个脚本中,我需要发出各种类型的“命令”.我还需要提供一种历史机制,用户可以使用上/下箭头键滚动到目前为止输入的命令.

这里列出的片段(Example 15-6,Detecting the arrow keys)并不完全符合我的要求.我真的想要以下内容:

>上/下箭头键应以静音模式运行.意思是,它们不应该在终端上回显它们的字符代码.
>但是其他键(将用于读取命令名称及其参数)不能以静默模式运行.

read -s -n3的问题在于它不能完全满足我的静默模式和回声模式的同时冲突要求,完全基于字符代码.此外,值-n3将适用于箭头键,但对于其他/常规键,它将不会“返回控制”到调用程序,直到消耗了3个字符.

现在,我可以尝试-n1并手动组装输入,一次一个字符(哎呀!).但基于字符代码的静音/回声模式切换问题仍然存在!

有没有人在bash中尝试过这个东西? (注意:我不能使用C,也不能使用其他脚本语言,如Perl,Python等)

编辑

继续Dennis的回答……您还需要通过历史记录手动将所需条目添加到历史记录中,如此…

while read -e x; do
    history -s "$x"
    # ...
done
您可以使用read -e来读取使用readline.它将处理您的光标键并为您维护历史记录.您还需要通过历史记录手动将所需条目添加到历史记录中,如下所示:
while read -e x; do
    history -s "$x"
    # ...
done

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读