bash 命令事件(或 shell)

bash 命令事件(或 shell)

有没有办法捕获 a 中执行的所有命令,bash甚至更好sh

我需要一个每次执行命令时都会调用的包装脚本。就像当我打字时,我希望调用cd /home/我的包装脚本。command_wrapper.sh在里面我想取消命令或调用另一个命令。

#!/bin/sh
#command_wrapper.sh

echo "you tried to call the command [$@]"

如果仅在命令不存在时调用脚本也没关系。这可能吗?

答案1

您可以使用DEBUG陷阱来执行此操作。在此陷阱中,$BASH_COMMAND包含最后执行的命令。

trap 'echo "you tried to call the command [$BASH_COMMAND]"' DEBUG

请注意,如果您在提示符或 中执行命令$PROMPT_COMMAND,陷阱也会在这些命令上运行。您可以添加检查以查看是否$BASH_COMMAND相同,以$PROMPT_COMMAND避免其中的一些情况。

至于命令不存在时执行,在 bash 中,如果command_not_found_handle存在名为 的函数,则只要未找到命令,就会执行该函数。它是使用您尝试执行的命令行中作为参数传递的所有参数来执行的,因此您可以执行以下操作:

command_not_found_handle() {
    echo "you tried to call the command [$@]"
}

这导致:

$ foo bar
you tried to call the command [foo bar]
$

相关内容