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

axzmvihb  于 2022-11-25  发布在  Shell
关注(0)|答案(4)|浏览(341)

使用标准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
xggvc2p6

xggvc2p61#

我的错误,我把bash函数移到了zsh:

gr() {
  git rebase -i HEAD~$1
}

解决方法:

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

gstyhher2#

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

unset -f export
von4xj4u

von4xj4u3#

我遇到了同样的问题,但命令不同:find

TL;DR

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

错误

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

问题

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

解决方案

避免调用函数的别名或在脚本中调用给定函数的命令
或者,对于c=f(c),不要从f调用c
而是使用以下三个选项之一:

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

实践中

我刚才在函数体中引用了find调用

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

然后查找文件的来源(“源文件”参见zsh doc,“点描述”参见POSIX规范)

这与原来的问题有什么关系?

1.这些问题似乎很相似:一个git调用会调用一个git别名/函数来调用它的调用者...

  1. omz git plugging,添加一个长的git别名列表,其中有
alias gr='git remote' # line 246

git branch调用之后,可能与OP自定义函数有一些冲突(但我不知道如何实现)
1.在我的情况下,公认的解决方案行不通
添加可选的(cf. zsh docfunction标识符不会阻止函数体中的别名调用(默认情况下)。这会导致递归问题,从而引发“达到最大嵌套函数级别”;“错误
1.可以 * 在bash和zsh之间共享自定义函数,方法是将它们放在一个单独的点文件中,然后从它们各自的rc文件中获取

或者

您可以unset或删除更改,如bluenote 10answer中所述

lmvvr0a8

lmvvr0a84#

关闭终端然后重新打开,对我很有效

相关问题