В следующем коде я ожидаю, что цикл while
будет выполнен три раза, по одному разу для каждой совпадающей строки во входном файле build.cfg
.Это на самом деле то, что происходит , но только если я закомментирую кишки блоков дела - то есть подоболочек, начинающихся с ( mkdir work ...
и ( cd product ...
.
При выполнении, как показано ниже, цикл выполняется только один раз (для BUILDTYPE == build
)
При запуске с -x ясно, что оболочка возвращается к началу и выполняет read
, ноEOF, поскольку ошибок нет, и выполнение продолжается со строки setStatus
.
Очевидно, что что-то в подоболочке мешает дескрипторам файлов внешнего конвейера.Может кто-нибудь объяснить, почему именно это происходит?
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