Bash脚本迭代目录中的文件进入无限循环

时间:2014-03-04 17:12:49

标签: bash

来自更大脚本的函数:

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
}

目标目录中有几个文件,实际上这是一个真实的例子: enter image description here

当我运行此功能时,会发生这种情况:

enter image description here

它很快就会在第一个文件上永远循环...(整个屏幕填满不到1秒)echo正在运行但没有别的 - 这个lipo操作需要一秒钟左右所以它每秒循环几十次,它没有运行。但没有给出任何错误。

如果我手动在单个文件上运行该命令,它似乎工作正常 - 或者如果我搞砸了我得到一个错误。真的有两个问题......

  1. 为什么只有echo正在运行?
  2. 无论命令成功,循环如何永远重复目录中的第一个文件?

1 个答案:

答案 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 :参见递归