0

次のスクリプトを書きました。

`find のファイル名。-name '*'.cpp | grep $IN_REGEX | grep -v $OUT_REGEX`
行う
    echo "出力ファイルは $OUTPUT_FILE です"
    count=`git log --pretty=format: --name-only $filename | grep -v ^$ | wc -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 に答える