UNIX 脚本用于查找包含特定文件 (pom.xml) 的目录,然后对其执行 maven 命令

UNIX 脚本用于查找包含特定文件 (pom.xml) 的目录,然后对其执行 maven 命令

我是脚本编写的新手,所以请耐心等待(如果可以的话)。

我想做类似的事情问题但是对于不同操作系统上的不同用户,“根”目录会有所不同(不能有任何“硬编码”的 Windows 路径,否则脚本会在另一台机器上失败)。

我在 Windows 7 上运行 cygwin,我想要的脚本也将由运行 Linux 的用户访问。

我可以在我的机器上简单地做到这一点:

cd "D:/first/second/third/fourth/fifth" (contains pom.xml I want to execute)
mvn clean package

位置“D:/first/second/third/”是我的计算机上的 basedir,所以我能找到一个可以在 Windows 和 Linux 上运行的相对路径吗?

我想要执行的 pom.xml 位于 /fourth/fifth/ 下。

我已经使用过find -name pom.xml -type f,但这会在我当前目录下的所有子目录中返回许多不同的 pom.xml 文件:

D:/first/second/third/pom.xml
D:/first/second/third/fourth/pom.xml
D:/first/second/third/fourth/fifth/pom.xml -> I want to run this one only
D:/first/different-secondsecond/pom.xml

有人可以给我一些提示,如何制作一个独立于操作系统的脚本来查找并运行我想要的 pom 吗?

提前致谢

答案1

注意:脚本第一行中的 -x 会在脚本执行时回显它们并帮助调试它 - 如果脚本在测试后执行了您想要的操作,则只需将其编辑掉即可。

尝试调用以下 Unix Bourne shell 脚本,或者在 Linux 中使用修改后的第一行:#!/bin/bash -x

要从命令行调用脚本(此处名为 mvnclnpkg.sh),例如:

$ ./mvnclnpkg.sh "D:/first/second/third" "/fourth/fifth"

脚本mvnclnpkg.sh如下:

#!/bin/sh -x

if [ $1 == "" -or $2 == "" ]
  then echo "$1 or $2 is null, please provide both parameters to script"
       exit 1
fi

BASEDIR=$1 # where BASEDIR = D:/first/second/third aka $1 parameter to script
RELDIR=$2 # where RELDIR = /fourth/fifth aka $2 parameter to script
MVNCLNPKGDIR=$BASEDIR$RELDIR # $1 is required root directory parameter to script

if ![ -d $MVNCLNPKGDIR ]
  then echo "$MVNCLNPKGDIR does not exist"
       exit 2
fi
cd $MVNCLNPKGDIR
if [ -f pom.xml ]
  then mvn clean package
  else echo "pom.xml does not exist in $ROOTDIR"
       exit 3
fi
exit 0

注意:因为您不想对 pom.xml 文件进行操作,而是希望它存在于特定的路径名​​中,然后执行 maven 命令,所以使用 find 命令编写脚本是没有意义的。

相关内容