【发布时间】:2017-04-05 10:18:58
【问题描述】:
我想以某种方式配置我的 bash,以便我对用户输入命令的事件做出反应。他们按下 Enter 的那一刻,我希望我的 bash 运行我首先安装的脚本(类似于任何PROMPT_COMMAND,每次发出提示时都会运行)。这个脚本应该可以
- 查看输入的内容,
- 也许可以改变它,
- 甚至可以让 shell 忽略它(即让它不执行该行),
- 决定是否将文本插入历史记录,
- 也许还有类似的东西。
我还没有找到合适的方法来做到这一点。我当前的实现都是有缺陷的,并且在执行命令之前使用调试陷阱进行干预,或者在执行命令之前使用(HISTTIMEFORMAT='%s '; history 1) 来询问历史在命令执行完成后关于命令启动时的事情等(但是只是事后诸葛亮,这并不是我真正想要的)。
我希望有类似 COMMAND_INTERCEPTION 的变量,它的工作方式类似于 PROMPT_COMMAND,但我找不到类似的东西。
我也考虑过使用命令行完成来实现我的目标,但无法找到任何关于在此发送完成的命令时做出反应的信息,但也许我只是没有找到它。
任何帮助表示赞赏:)
【问题讨论】:
-
几天前我发了一个关于measuring time of commands in bash using
PS0andPS1的问题的答案。我相信您可以在PS0中“嵌入”您的操作。因此,该链接可能会为您提供必要的灵感(尽管我真的不确定“干预”、“交换输入命令”等,即如何使其工作。) -
PS0, nice :) 不幸的是,我的 Ubuntu 16.04(最新的 LTS 版本)仍然包含一个没有那个补丁的 bash,所以它对PS0一无所知.此外,从我读到的内容来看,这个 PS0 无法访问给定的命令,无法读取或更改它。但无论如何感谢PS0的提示!至少对于未来的设置,我可能会使用这个。 -
所以,我猜你的解决方案有点像DEBUG trap and PROMPT_COMMAND in Bash(但可能更复杂)。顺便提一句。我什至没有注意到
PS0是一个如此新的 bash 功能。谢谢,我又学到了一些新东西...... -
PS0是 bash-4.4 中新增的。
标签: linux bash shell interceptor prompt