Puede separar sus comandos usando un punto y coma:
cd /my_folder;rm *.jar;svn co path to repo;mvn compile package install
¿Era eso lo que querías decir?
Si desea ejecutar cada comando solo si el anterior tuvo éxito, combínelos usando el &&
operador:
cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install
Si uno de los comandos falla, todos los demás comandos que le siguen no se ejecutarán.
Si desea ejecutar todos los comandos independientemente de si los anteriores fallaron o no, sepárelos con punto y coma:
cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install
En su caso, creo que desea el primer caso en el que la ejecución del siguiente comando depende del éxito del anterior.
También puede poner todos los comandos en un script y ejecutarlo en su lugar:
#! /bin/sh
cd /my_folder \
&& rm *.jar \
&& svn co path to repo \
&& mvn compile package install
Las barras invertidas al final de la línea están ahí para evitar que el shell piense que la siguiente línea es un nuevo comando; si omite las barras invertidas, deberá escribir todo el comando en una sola línea.
Una forma más conveniente en comparación con el uso de barras invertidas y &&
en todas partes es para indicarle al shell que salga del script si alguno de los comandos falla. Lo haces usando el set
función incorporada con el -e
argumento. Con eso, puedes escribir un guión de una manera mucho más natural:
#! /bin/sh
set -e
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
Guárdelo en un archivo, por ejemplo myscript
y hacerlo ejecutable:
chmod +x myscript
Ahora puede ejecutar ese script como otros programas en la máquina. Pero si no lo coloca dentro de un directorio listado en su PATH
variable de entorno (por ejemplo, /usr/local/bin
, o en algunas distribuciones de Linux ~/bin
), deberá especificar la ruta a ese script. Si está en el directorio actual, lo ejecuta con:
./myscript
Los comandos del script funcionan de la misma manera que los comandos del primer ejemplo; el siguiente comando solo se ejecuta si el anterior tuvo éxito. Para la ejecución incondicional de todos los comandos, simplemente no llame a set -e
:
#! /bin/sh
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
He encontrado que usando; para separar los comandos solo funciona en primer plano. por ejemplo:
cmd1; cmd2; cmd3 &
- solo ejecutará cmd3
en segundo plano, mientras que cmd1 && cmd2 && cmd3 &
- ejecutará toda la cadena en segundo plano SI no hay errores.
Para atender la ejecución incondicional, el uso de paréntesis resuelve esto:
(cmd1; cmd2; cmd3) &
- ejecutará la cadena de comandos en segundo plano, incluso si falla algún paso.
Para ejecutarlos todos a la vez, puede usar la tecla de canalización "|" así:
$ cd /my_folder | rm *.jar | svn co path to repo | mvn compile package install