Я новичок в написании сценариев, поэтому, пожалуйста, потерпите меня (если можете).

Я хочу сделать что-то похожее на этот вопрос, но каталог «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/» является базируемым на моей машине, так что я могу найти относительный путь для этого, который будет работать в 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 ответ1

0

Примечание: -x в первой строке скрипта повторяет строки скрипта по мере их выполнения и помогает отлаживать его - просто отредактируйте его, если скрипт выполнит то, что вы хотите после тестирования.

Попробуйте вызвать следующий скрипт оболочки Unix Bourne или в Linux, используя 1-ю строку, измененную как: #!/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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .