繁体   English   中英

Shell脚本,同时循环触发构建

[英]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 ,并将行的其余部分分配给另一个变量。 一起使用pushdpopd比手动记录旧的工作目录更简单。 由于使用的是子外壳,因此无论如何都不需要使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM