Сценарий UNIX, чтобы найти каталоги, которые содержат определенный файл (pom.xml), а затем выполнить на нем команду maven
Я новичок в написании сценариев, поэтому, пожалуйста, потерпите меня (если можете).
Я хочу сделать что-то похожее на этот вопрос, но каталог "root" будет отличаться для разных пользователей в разных ОС (не может быть никаких "жестко закодированных" оконных путей, иначе скрипт не будет работать на другой машине).
Я использую cygwin в Windows 7, и пользователи, использующие Linux, также получат доступ к нужному сценарию.
Я могу просто сделать это на моей машине:
cd "D:/first/second/third/fourth/fifth" (contains pom.xml I want to execute)
mvn clean package
Расположение "D:/first/second/third/" является baseir на моей машине, поэтому я могу найти относительный путь для этого, который будет работать на Windows и Linux?
Pom.xml я хочу выполнить жизни в / четвертый / пятый /.
Я использовал 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 или в 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.