Pregunta La secuencia de comandos UNIX para encontrar los directorios que contienen un archivo específico (pom.xml) luego ejecuta un comando maven en él


Soy nuevo en scripting así que por favor tengan paciencia conmigo (si pueden).

Quiero hacer algo similar a esto pregunta pero el directorio 'raíz' será diferente para diferentes usuarios en diferentes sistemas operativos (no puede haber ninguna ruta de acceso de Windows 'codificada' de lo contrario el script fallará en otra máquina).

Estoy ejecutando cygwin en Windows 7 y el script que quiero también será accedido por usuarios que ejecutan Linux.

Simplemente puedo hacer esto en mi máquina:

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

La ubicación "D: / first / second / third /" está basada en mi máquina, entonces ¿puedo encontrar una ruta relativa para esto que funcione en Windows y Linux?

El pom.xml que quiero ejecutar vive en / fourth / fifth /.

he usado find -name pom.xml -type f pero esto devuelve muchos archivos pom.xml diferentes en todos los subdirectorios bajo mi actual:

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

¿Alguien puede darme algunos consejos sobre cómo puedo hacer un script independiente del sistema operativo que encuentre y ejecute el pom que quiero?

Gracias por adelantado


0


origen




Respuestas:


Nota: el -x en la primera línea del guión hace eco de las líneas de los scripts mientras se ejecutan y ayuda a depurarlo, simplemente edítelo si el script hace lo que usted desea después de probarlo.

Intente invocar la siguiente secuencia de comandos del shell Bourne de Unix o con Linux utilizando la 1.ª línea modificada como: #! / Bin / bash -x

Para invocar el script (denominado aquí mvnclnpkg.sh) desde una línea de comando, p. Ej .:

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

El script, mvnclnpkg.sh sigue:

#!/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 no quería operar en el archivo pom.xml, sino que quería que existiera en un nombre de ruta particular y luego ejecutar el comando maven, no tenía sentido codificar el script con el comando find.


0



Gracias por la asistencia, sin embargo, quiero que el script sea independiente para que nadie tenga que pasar ningún parámetro cuando lo ejecuten. Si sustituyo los valores reales para BASEDIR y RELDIR, 'debería' funcionar bien, pero no es así. Estoy usando BASEDIR = "$ (dirname $ (readlink -f $ 0))" y RELDIR = / sixth / seven / y asignándolo a la variable MVNCLNPKG. Esto es un error: $ ./mvnclnpkg.sh ./mvnclnpkg.sh: línea 3: / cygdrive / h / third / fourth / fifth / sixth: es un directorio ./mvnclnpkg.sh: línea 4: RELDIR: comando no encontrado. /mvnclnpkg.sh: línea 7:! [: comando no encontrado pom.xml no existe en - Justice Bringer
Solucionado mis problemas hoy, si [! -d ....] es obligatorio en lugar de tener el! fuera del corchete. - Justice Bringer