bash echo string>>文件不起作用

时间:2013-03-01 12:24:48

标签: bash echo io-redirection

我写了以下脚本:

for filename in `find . -name '*'.cpp | grep $IN_REGEX | grep -v $OUT_REGEX`
do
    echo "Output file is $OUTPUT_FILE"
    count=`git log --pretty=format: --name-only $filename | grep -v ^$ | wc -l`
    echo "$count    $filename" >> $OUTPUT_FILE
done

但没有任何内容写入输出文件。

请注意:

  1. 我设置了OUTPUT_FILE,IN_REGEX和OUT_REGEX的值。
  2. 正在执行循环内的代码。我用sh -x invokation检查了这个。
  3. 当我删除>> $ OUTPUT_FILE我得到输出。
  4. 我尝试在脚本中触摸$ OUTPUT_FILE,这很正常。
  5. 有人可以指出我的错误在哪里吗?

1 个答案:

答案 0 :(得分:1)

这行代码

for filename in `find . -name '*'.cpp 

enter image description here

(中断文件名中的空格)

你应该这样做:

while IFS= read -r file; do
    echo "Output file is $OUTPUT_FILE"
    count=$(git log --pretty=format: --name-only "$file" | grep -v '^$' | wc -l)
    echo "$count    $file" >> "$OUTPUT_FILE"      
done < <(find . -name '*.cpp' | grep "$IN_REGEX" | grep -v "$OUT_REGEX")

为此,请确保$OUTPUT_FILE中有路径。