如何检测正在执行的命令,然后在当前命令之后执行附加命令

如何检测正在执行的命令,然后在当前命令之后执行附加命令

我希望 shell 检测到我已经运行了特定命令,然后在运行该命令后运行另一个命令。

例如:当我每次运行命令时:git commit -m " "

首先完成上述命令,然后运行另一个命令,例如:python check.py

我倾向于修改该.bash_rc文件。我对吗 ?

提前致谢。

答案1

trap在 bash 中使用该命令。

陷阱 [-lp] [[arg] sigspec ...]

如果 sigspec 是 DEBUG,则命令 arg 在每个简单命令之前执行...

现在你唯一的问题是你的 trap 命令是在该命令之前运行的,而不是在该命令之后运行的。但你可以用 来引用要执行的命令$BASH_COMMAND,并且可以使该命令不被执行。

外部调试

  1. 如果 DEBUG 陷阱运行的命令返回非零值,则将跳过并且不执行下一个命令。

所以设置一个 DEBUG 陷阱,如果检测到你感兴趣的命令,就执行$BASH_COMMAND,执行你自己的命令然后导致原来的命令不被运行。

编辑

试试这个例子:

#!/bin/bash                                                                                                                                                                                                                                                                     

function myfunc ()
{
    if test "$BASH_COMMAND" = "echo 1"; then
        $BASH_COMMAND
        echo "runing after 'echo 1'"
        return 1
    else
        return 0
    fi
}

shopt -s extdebug
trap "myfunc" DEBUG

echo 1
echo 2

执行这个脚本:

$ bash test.sh
1
runing after 'echo 1'
2

相关内容