【问题标题】:Maximum nested function level reached已达到最大嵌套函数级别
【发布时间】:2014-02-18 02:21:52
【问题描述】:

我有目录层次结构,其中“根”目录有一个名为“text.txt”的文件。我想找到这个“根”目录,然后在其中运行命令“foo”。这是我目前拥有的

# Locates the root directory
locateRoot () {
  local root
  #Findup looks up through the directory hierarchy. I'm sure this works.
  root=$(findup text.txt  2>&/dev/null)  
  if [[ $? -ne 0 ]]
    then
    echo "Root not found"
    return 1
  fi
  echo root
}

# Does foo from within the root directory
runFoo () {
  local myDir 
  myDir=$(locateRoot)
  pushd $myDir 1>&/dev/null
  foo $@
  popd 1>&/dev/null
}

但是,每当我运行这个程序时,我都会得到:

maximum nested function level reached

我所拥有的有什么问题?我很肯定 foo 按预期工作。

【问题讨论】:

  • 第 11 行的“echo root”应该是“echo $root”。此外,当编写一个输出一些数据然后用 $() 捕获的函数时,将其与消息混合不是一个好主意:您应该将第 8 行的错误消息写入 stderr。
  • 想简单解释一下为什么?抱歉,我对此真的很陌生。谢谢:)
  • 因为在bash中,要使用变量“root”的值,需要写成$root
  • 即使更改了第 11 行,它仍然无法正常工作。和以前一样的错误

标签: bash zsh


【解决方案1】:

在你 locateRoot 函数中你只是 echo 只有 root 不是它的内容,这是错误的,你的脚本似乎很长,以执行一些简单的任务。我给你示例脚本,它打印到目录的路径包含text.txt 文件。

#! /bin/bash
locateRoot () 
{
    var=$(find / -iname "text.txt" -printf '%h\n' | sort -u)
    printf "%s \n" "$var"
}

您可以看到包含该文件的目录的绝对路径。您可以修改上面的脚本以执行某些任务,只需 cd 到该目录,如

cd $var
//execute your command in $var directory

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 2011-07-03
    • 1970-01-01
    • 2013-07-23
    • 2012-04-26
    • 2015-06-03
    • 2019-03-23
    相关资源
    最近更新 更多