[英]shell script while loop trigger build
我需要触发一些特定项目的构建,这些特定项目以逗号分隔在文本文件中。
我编写了一个Shell脚本来拆分文件内容,提取文件夹并导航到该文件夹。 导航完成后,触发构建,这应该在所有项目路径中进行。 如果我在导航后确实在目录中列出文件,则以下脚本可以正常工作,但是在进行gradle构建时,此脚本仅执行一次。
下面是我的shell脚本
CWD="$(pwd)"
INPUT=deploy.txt
OLDIFS=$IFS
IFS=","
[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; }
while read f1
do
echo "$f1 building...";
(
cd $f1;
gradle clean b u;
cd $CWD;
)
echo "Build over"
done < $INPUT
IFS=$OLDIFS
这个脚本有问题吗? 请帮忙
这是推测性的(为gradle
命令重定向标准输入),但是我想借此机会修复脚本中的其他问题。
INPUT=deploy.txt
# Consider exiting with status 1 instead of 99 unless you have
# a specific reason for using 99.
[ ! -f "$INPUT" ] && { echo "$INPUT file not found"; exit 99; }
while IFS=, read -r f1 rest
do
echo "$f1 building..."
pushd "$f1"
gradle clean b u < /dev/null
popd
echo "Build over"
done < "$INPUT"
我假设您正在更改IFS
的值,以便拆分从$INPUT
读取的行; 在这种情况下,您需要至少read
两个变量,以便将第一个字段分配给f1
,并将行的其余部分分配给另一个变量。 一起使用pushd
和popd
比手动记录旧的工作目录更简单。 由于使用的是子外壳,因此无论如何都不需要使用CWD
,因为第一个cd
的效果仅在该子外壳退出之前才有效。
如果出于某种原因gradle
确实需要访问标准输入,请使用其他文件描述符从$INPUT
读取。 (你可以考虑反正这样做,你绝对知道 , read
应该从阅读$INPUT
,所以没有理由来干扰gradle
在所有。)
while IFS=, read -r f1 rest <&3; do
echo "$f1 building..."
pushd "$f1"
gradle clean b u
popd
done 3< "$INPUT"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.