0

私はgitフックを書いていますが、次のコードの動作に非常に混乱しています:

#!/bin/sh

exit_code=0

git diff --cached --name-only --diff-filter=ACM | while read line; do
    echo "Do something with file: $line"
    # some stuff with exit code is equals to 0 or 1
    stuff_exit_code=$?
    exit_code=$(($exit_code + $stuff_exit_code))
done

echo $exit_code
exit $exit_code

echo $exit_codeは、私のスタッフの終了コードがゼロ以外の場合に、ファイルの合計量を生成することを期待しています。しかし、私は常に 0 を見ています。私の間違いはどこですか?

4

1 に答える 1

0

これは、パイプが別のプロセスで実行されるためです。for-inループに置き換えただけです。

#!/bin/sh

exit_code=0

for file in `git diff --cached --name-only --diff-filter=ACM`
do
    echo "Do something with file: $file"
    # some stuff with exit code is equals to 0 or 1
    stuff_exit_code=$?
    exit_code=$(($exit_code + $stuff_exit_code))
done

echo $exit_code
exit $exit_code
于 2013-07-18T08:16:05.697 に答える