我想以某种方式配置我的bash,以便我对用户输入命令的事件做出反应。他们按 Enter 的那一刻我希望我的bash能够运行我首先安装的脚本(类似于每次发出提示时运行的任何PROMPT_COMMAND
)。这个脚本应该能够
我还没有找到合适的方法来做到这一点。我当前的实现都是有缺陷的,并且在执行命令之前使用调试陷阱之类的东西进行干预,或者在命令执行完成后使用(HISTTIMEFORMAT='%s '; history 1)
询问历史关于命令启动时的事情等(但这只是后见之明并不是我想要的事情。
我希望COMMAND_INTERCEPTION
变量之类的内容与PROMPT_COMMAND
类似,但我找不到类似的内容。
我还考虑使用命令行完成来实现我的目标但是却找不到任何关于在此发送完成命令的反应,但也许我还没有找到它。
任何帮助表示赞赏:)
答案 0 :(得分:1)
您可以使用DEBUG
陷阱和extdebug
feature,并从陷阱处理程序中查看BASH_COMMAND
以查看正在运行的命令。 (尽管如注释中所述,调试陷阱出现在每个简单命令上,而不是每个命令行。还有子shell无法实现。)
调试处理程序可以阻止命令运行,但不能直接更改它。当然,您可以在调试器中运行任何命令,可能使用BASH_COMMAND
和eval
来构建它,然后告诉shell忽略原始命令。
这会阻止以ls
开头的任何内容:
$ preventls() { case "$BASH_COMMAND" in ls*) echo "no!"; return 1 ;; esac; }
$ shopt -s extdebug
$ trap preventls DEBUG
$ ls -l
no!
使用trap - DEBUG
删除陷阱。在Bash 4.3.30上进行了测试。