在下面的代碼我期望while
循環來爲輸入build.cfg
文件中的每個匹配線執行三次,一次。這實際上是在什麼不發生,但只有當我註釋掉的情況下塊的膽量 - 即開始(mkdir work ...
和(cd product ...
的子shell。bash的讀循環過早EOF
當如下圖所示執行,循環只執行一次(BUILDTYPE == build
)
當與-x運行,很明顯的是,外殼環回和執行read
,但得到EOF,因爲沒有錯誤,繼續執行setStatus
行。
顯然,一些在子shell與外管道文件描述符的干擾。有人可以解釋爲什麼會發生這種情況嗎?
egrep "^\s*$BRANCH" $ETC/build.cfg | (while read BRANCH TARGET SVNSRC SVNTAG BUILDTYPE DISTTYPE DISTARGS
do
echo ----- $TARGET $BUILDTYPE
pushd $WORKSPACE/$BUILDUID
case $BUILDTYPE in
build)
echo ">>> BUILD"
(mkdir work
cp product/buildcontrol/buildConfig_example.xml work/defaultBuildConfig.xml
cd product
./build installer-all)
;;
tma)
echo ">>> TMA"
(cd product
./build -f ..${SVNTAG}build.xml)
;;
*)
;;
esac
popd
done)
setStatus 3
由於