oh-my-zsh:git 达到最大嵌套函数级别

oh-my-zsh: git maximum nested function level reached

使用标准 git 命令时出现错误:

[~/site]$ git branch
git:1: maximum nested function level reached

.zshrc:

plugins=(git osx colored-man gem brew go bundler rake rails)
source $ZSH/oh-my-zsh.sh

我的错误,我将 bash 功能移动到 zsh:

gr() {
  git rebase -i HEAD~
}

解决方案:

function gr() {
  git rebase -i HEAD~
}

我用不同的命令 (export) 遇到了同样的错误,这是由意外的递归函数定义引起的。我可以通过删除不需要的功能来解决问题:

unset -f export

我有同样的问题,使用不同的命令:find

TL;DR

不要在函数脚本中调用函数的别名。


错误

$ find ~ -name some_thing
find_no_err:1: maximum nested function level reached; increase FUNCNEST?

问题

  • 我创建了一个函数 f (find_no_err),它使用命令 c (find )
  • 然后,定义了一个将命令关联到函数的别名,如下
alias c=f
  • 所以我最终得到了一个没有停止条件的复活:
# the recursion issue
c=f(c)

解决方案

避免调用在其脚本中调用给定函数的函数或命令的别名

或者,在 c=f(c) 的情况下,不要调用 c 形式 f

而是使用这 3 个选项之一:

  • 使用命令的相对路径(例如cmd
  ./cmd
  • 使用命令的完整路径
  # to get it, in linux systems, use
  whereis cmd
  • 在函数脚本中引用命令调用
  'cmd'

在实践中

我刚刚在函数体内引用了 find 调用

find_no_err(){
  'find' $* 2>/dev/null
}

然后获取文件(参见 zsh doc for "source file", cf. POSIX spec“点描述”)

这与原问题有什么关系?

  1. 这些问题看起来很相似:一个 git 调用调用一个 git alias/function 调用它的调用者 ...

  2. omz的git plugging,添加一长串git别名,其中有

alias gr='git remote' # line 246

git branch 调用后可能与 OP 自定义函数有一些冲突(但我不知道如何)

  1. 就我而言,接受的解决方案不起作用

添加可选的 (cf. zsh doc) function 标识符,不会阻止函数体内的别名调用(默认情况下)。这导致递归问题,抛出“达到最大嵌套函数级别;”错误

  1. 可以*在 bash 和 zsh 之间共享自定义函数,方法是将它们放在一个单独的点文件中,然后从相应的 rc 文件中获取它

或者

您可以unset或删除更改,如bluenote10中所述