2014-02-18 76 views
2

我有目录层次结构,其中“根”目录有一个名为“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 [email protected] 
    popd 1>&/dev/null 
} 

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

maximum nested function level reached 

这有什么错我有什么?我确信foo按预期工作。

+0

你“回声根”在第11行执行,只要你想某些任务应该是“回声$根”。另外,当编写一个输出一些数据然后用$()捕获的函数时,将它与消息混合并不是一个好主意:你应该将第8行的错误消息写入stderr。 –

+0

小心解释一下为什么?对不起,我真的很陌生。谢谢:) – Nosrettap

+0

因为在bash中使用变量“root”的值,所以需要写入$ root –

回答

0

在你locateRoot功能您只需echoroot没有内容的话,这是错误的,你的脚本似乎很漫长的执行一些简单的task.i给你哪个打印目录的路径包含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 
相关问题