簡體   English   中英

oh-my-zsh:git 達到最大嵌套 function 級別

[英]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~$1
}

解:

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

我有同樣的問題,使用不同的命令: find

TL; 博士

不要在函數腳本內調用函數的別名。


錯誤

➜  ~ find ~ -name some_thing
find_no_permission_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 文檔,“點描述”的POSIX 規范

這與最初的問題有什么關系?

  1. 這些問題似乎很相似:一個 git 調用調用了一個調用其調用者的 git 別名/函數......

  2. omz 的git plugging ,添加一長串 git 別名,其中有

alias gr='git remote' # line 246

這可能與 OP 自定義函數有一些沖突,在git branch調用之后(但我不知道如何)

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

添加可選的(參見zsh docfunction標識符不會阻止函數體內的別名調用(默認情況下)。 這導致遞歸問題,它拋出“達到最大嵌套函數級別;” 錯誤

  1. 可以*在 bash 和 zsh 之間共享自定義函數,方法是將它們放在單獨的 dotfile 中,然后從相應的 rc 文件中獲取它

或者

您可以unset或刪除更改,如bluenote10答案中所述

由於意外的遞歸函數定義導致不同的命令( export )出現相同的錯誤。 我可以通過刪除不需要的功能來解決問題:

unset -f export

關閉終端並重新打開它,對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM