来自更大脚本的函数:
function lipo {
OUTDIR=$SDK_DIR/lib/$CONFIG
mkdir -p $OUTDIR
for LIBNAME in $SDK_DIR/lib/$CONFIG-iphoneos/lib*
do
BASELIBNAME=`basename $LIBNAME`
OUTLIB=$OUTDIR/$BASELIBNAME
echo lipo $BASELIBNAME for $CONFIG
lipo $SDK_DIR/lib/$CONFIG-iphoneos/$BASELIBNAME $SDK_DIR/lib/$CONFIG-iphonesimulator/$BASELIBNAME -create -output $OUTLIB
done
}
目标目录中有几个文件,实际上这是一个真实的例子:
当我运行此功能时,会发生这种情况:
它很快就会在第一个文件上永远循环...(整个屏幕填满不到1秒)echo
正在运行但没有别的 - 这个lipo
操作需要一秒钟左右所以它每秒循环几十次,它没有运行。但没有给出任何错误。
如果我手动在单个文件上运行该命令,它似乎工作正常 - 或者如果我搞砸了我得到一个错误。真的有两个问题......
echo
正在运行?答案 0 :(得分:4)
答案是递归 1 。
你实际上在做:
foo() {
echo something
foo
}
您可能希望将函数名称更改为其他名称。
或者,您可以通过说:
来抑制shell函数查找command lipo $SDK_DIR/lib/$CONFIG-iphoneos/$BASELIBNAME $SDK_DIR/lib/$CONFIG-iphonesimulator/$BASELIBNAME -create -output $OUTLIB
而不是
lipo $SDK_DIR/lib/$CONFIG-iphoneos/$BASELIBNAME $SDK_DIR/lib/$CONFIG-iphonesimulator/$BASELIBNAME -create -output $OUTLIB
在这种情况下,您可以将现有的函数名称保留为。
引用help command
:
Runs COMMAND with ARGS suppressing shell function lookup, or display
information about the specified COMMANDs. Can be used to invoke commands
on disk when a function with the same name exists.
1。递归, n :参见递归。