Сценарий 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.

Другие вопросы по тегам