通过 bash 函数在其他命令中包装 git

Wrapping git in other commands via bash function

所以我想 运行 在我调用 git 之前和之后的一段 AppleScript(不是下面的 AppleScript,不同的 AppleScript,但这应该能说明问题)。我遇到的问题是 git 命令有可变数量的参数,所以我不能只使用 给它第一个,它必须是传入的数字. 这是我的 .bash_profile:

中的代码
function git() {
    osascript -e 'display alert "before git command"';
    git "$@";
    osascript -e 'display alert "after git command"';
}

预期的结果是第一段 applescript 运行s,git 运行s 提供了任意数量的参数,然后是最后一段 applescript 运行秒。真正发生的是第一段 applescript 运行 无限期地重复。我认为问题可能是 git 之后的 "$@"From what I understand 使用 "$@" 将转储所有参数。但是第一段 applescript 只是 运行 无限循环。给出了什么?

您破坏了 git 名称。你的函数是 git 并且你在函数中调用了 git 。恭喜,你会递归了。

你需要告诉 shell 调用中间的 real git 二进制文件。

使用command git/full/path/to/git

还有\git(但我认为这只是避免了别名而不是函数)。

此外,正如@ryenus 在评论中指出的那样。 env 二进制 /usr/bin/env/bin/env 也可用于此目的(尽管它不仅仅是避免该功能,还需要生成额外的外部进程)。