0

我写了以下脚本:

在 `find 中查找文件名。-name '*'.cpp | grep $IN_REGEX | grep -v $OUT_REGEX`
做
    echo "输出文件为 $OUTPUT_FILE"
    count=`git log --pretty=format: --name-only $filename | grep -v ^$ | 厕所-l`
    echo "$count $filename" >> $OUTPUT_FILE
完毕

但是没有任何东西被写入输出文件。

请注意:

  1. 我已经设置了 OUTPUT_FILE、IN_REGEX 和 OUT_REGEX 的值。
  2. 循环内的代码正在执行。我用 sh -x 调用检查了这一点。
  3. 当我删除 >> $OUTPUT_FILE 时,我得到了输出。
  4. 我在脚本中尝试了触摸 $OUTPUT_FILE 并且工作正常。

有人可以在这里指出我的错误吗?

4

1 回答 1

1

这行代码

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

是一个在此处输入图像描述

(文件名中的空格中断)

你应该这样做:

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有路径。

于 2013-03-01T12:53:18.313 回答