jhe*_*ran 10 shell bash function
例如,假设我有一个命令git branch
(总是有几个词)。
我想要的是跟踪何时使用参数执行此命令。例如,如果我git branch develop
没有错误地执行命令,我想保存develop
在一个文件中。
我试图覆盖我的 git 命令.bash_profile
,如下所示:
git () {
if [ $# -eq 3 ]
then
git $@
echo $2 > /path/tacked_parameters.txt
else
git $@
fi
}
Run Code Online (Sandbox Code Playgroud)
但似乎效果不佳。有没有办法做到这一点?
Sté*_*las 18
您在这里遇到了一些问题:
git
函数正在递归调用自身而不是原始git
命令。$@
是没有任何意义的未引用echo
的任意数据。git
命令的退出状态。~/.bash_profile
,用于自定义您的登录会话,而不是您的 shell,并且通常不会被非登录bash
调用读取。你会想要这样的:
git() {
if [ "$#" -eq 3 ]
then
local ret
command git "$@"; ret=$?
printf '%s\n' "$2" >> /path/tacked_parameters.txt
return "$ret"
else
command git "$@"
fi
}
Run Code Online (Sandbox Code Playgroud)
那是:
command
运行git
命令,git
在局部变量中并在退出时返回,>>
而不是>
重定向到日志文件。printf
代替echo
.~/.bashrc
(确保您~/.bash_profile
正在采购,~/.bashrc
因为默认情况下bash
不会读取登录外壳~/.bashrc
(bash
错误/错误功能))。除非您想导出该git
函数(使用export -f git
),以防万一您还需要调用该函数的bash
脚本git
。