Script do UNIX para encontrar diretórios que contenham um arquivo específico (pom.xml) e execute um comando maven nele

0

Sou novo na criação de scripts, então, por favor, fique comigo (se puder).

Eu quero fazer algo semelhante a este question mas o diretório 'root' será diferente para diferentes usuários em sistemas operacionais diferentes (não pode haver nenhum caminho do Windows 'codificado' senão o script falhará em outra máquina).

Estou executando o cygwin no Windows 7 e o script que eu quero também será acessado por usuários que executam o Linux.

Eu posso simplesmente fazer isso na minha máquina:

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

O local "D: / first / second / third /" é o basedir da minha máquina, então posso encontrar um caminho relativo para isso que funcionará no windows e no linux?

O pom.xml que eu quero executar mora em / fourth / fifth /.

Eu usei find -name pom.xml -type f , mas isso retorna muitos arquivos pom.xml diferentes em todos os subdiretórios do meu atual:

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

Alguém pode me dar algumas dicas sobre como criar um script independente do sistema operacional que encontre e execute o pom que eu quero?

Obrigado antecipadamente

    
por Justice Bringer 09.12.2011 / 16:36

1 resposta

0

Observação: o -x na primeira linha do script faz eco das linhas de script à medida que são executadas e ajuda a depurá-las. Basta editá-las se o script fizer o que você deseja depois de testá-lo.

Tente invocar o seguinte shell script Unix Bourne ou com o Linux usando a primeira linha modificada como: #! / bin / bash -x

Para invocar o script (aqui chamado mvnclnpkg.sh) a partir de uma linha de comando, por exemplo:

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

O script, mvnclnpkg.sh, segue:

#!/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

Nota: Como você não queria operar no arquivo pom.xml, mas queria que ele existisse em um determinado nome de caminho e, em seguida, executasse o comando maven, não fazia sentido codificar o script com o comando find .

    
por 09.12.2011 / 18:54