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。