我是脚本编写的新手,所以请耐心等待(如果可以的话)。
我想做类似的事情问题但是对于不同操作系统上的不同用户,“根”目录会有所不同(不能有任何“硬编码”的 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 命令编写脚本是没有意义的。