跟踪某些命令的某些参数

跟踪某些命令的某些参数

例如,假设我有一个命令git branch(总是带有几个单词)。

我想要的是跟踪何时使用参数执行此命令。例如,如果我执行命令git branch develop没有错误,我想保存develop在文件中。

我尝试覆盖我的 git 命令.bash_profile,如下所示:

git () {
    if [ $# -eq 3 ]
    then
        git $@
        echo $2 > /path/tacked_parameters.txt
    else
        git $@
    fi
}

但似乎效果不太好。有什么办法可以做到这一点吗?

答案1

你在这里遇到了一些问题:

  • 您的git函数正在递归地调用自身而不是原始git命令。
  • 你使用的是$@不带引号的,这没有任何意义
  • 你是保留其他变量不带引号,要求 shell 将它们分割+通配。
  • 你是用于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
}

那是:

  • 引用你的变量,
  • 用于command运行git 命令,
  • 将退出状态保存git在局部变量中并在退出时返回它,
  • 使用>>而不是>重定向到日志文件。
  • 使用printf而不是echo.
  • 并将其放入您的~/.bashrc(确保您的~/.bash_profile采购是~/.bashrc因为登录bash外壳默认情况下不读取~/.bashrcbash错误/错误功能))。除非您想导出该git函数(使用export -f git),以防万一您还需要调用调用该函数bash的脚本。git

相关内容