2013-03-01 76 views
0

我寫了下面的腳本:慶典回饋字符串>>文件不起作用

 
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,並且工作正常。

有人請指出我的錯誤在哪裏?

+0

什麼是IN_REGEX和OUT_REGEX? find中的文件名是什麼? -name'*'.cpp' print? – 2013-03-01 12:29:31

+0

它們是正則表達式來限制文件列表。 – 2013-03-01 12:40:33

+0

你絕對確定你正在運行'bash'嗎?這是'zsh'和其他一些shell中的一個特性,但不是'bash'。 – 2013-03-01 12:46:03

回答

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有一個路徑。

+0

我明白你的觀點。但我知道任何文件名都沒有空格。 – 2013-03-01 12:59:06

+0

你有沒有試過我的代碼?我已經修復了缺失的引號等等...... – 2013-03-01 13:04:38

+0

它在我的git倉庫中起到一種魅力 – 2013-03-01 13:07:01

相關問題