bri*_*ore 2 linux command-line shell bash
有没有办法捕获在 a 中执行的所有命令,bash甚至更好sh?
我需要一个每次执行命令时都会调用的包装脚本。就像我键入时一样,我cd /home/希望command_wrapper.sh调用我的包装器脚本。在里面我想取消命令或调用另一个命令。
#!/bin/sh
#command_wrapper.sh
echo "you tried to call the command [$@]"
Run Code Online (Sandbox Code Playgroud)
如果仅在命令不存在时才调用脚本,那也没关系。这可能吗?
您可以使用DEBUG陷阱来做到这一点。在这个陷阱中,$BASH_COMMAND包含最后执行的命令。
trap 'echo "you tried to call the command [$BASH_COMMAND]"' DEBUG
Run Code Online (Sandbox Code Playgroud)
请注意,如果您将命令作为提示或的一部分执行$PROMPT_COMMAND,陷阱也会在这些命令上运行。您可以添加检查以查看是否与避免其中一些$BASH_COMMAND相同$PROMPT_COMMAND。
至于在命令不存在时执行,在bash中,如果一个名为的函数command_not_found_handle存在,那么只要找不到命令,就会执行该函数。它使用您尝试执行的命令行中的所有参数作为参数执行,因此您可以执行以下操作:
command_not_found_handle() {
echo "you tried to call the command [$@]"
}
Run Code Online (Sandbox Code Playgroud)
这导致:
$ foo bar
you tried to call the command [foo bar]
$
Run Code Online (Sandbox Code Playgroud)