我希望 shell 检测到我已经运行了特定命令,然后在运行该命令后运行另一个命令。
例如:当我每次运行命令时:git commit -m " "
首先完成上述命令,然后运行另一个命令,例如:python check.py
我倾向于修改该.bash_rc
文件。我对吗 ?
提前致谢。
答案1
trap
在 bash 中使用该命令。
陷阱 [-lp] [[arg] sigspec ...]
如果 sigspec 是 DEBUG,则命令 arg 在每个简单命令之前执行...
现在你唯一的问题是你的 trap 命令是在该命令之前运行的,而不是在该命令之后运行的。但你可以用 来引用要执行的命令$BASH_COMMAND
,并且可以使该命令不被执行。
外部调试
- 如果 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