GNU/Linux >> Tutoriales Linux >  >> Linux

Ejecute combinar múltiples comandos de Linux en una línea

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

Linux
  1. Envía comandos a múltiples sesiones SSH con Terminator

  2. Conceptos básicos de la línea de comandos de Linux:ejecución de comandos desde la línea de comandos

  3. Ejecutar comandos de Shell desde el programa que se ejecuta en WINE

  4. Obtenga la línea N de múltiples archivos en Linux

  5. matlab ejecuta el script desde la línea de comando de Linux

Ejecutar comandos en sistemas Linux remotos a través de SSH

Copie un archivo a varios directorios desde la línea de comandos en Linux

Cómo ejecutar múltiples comandos de Linux en un solo comando

Cómo combinar varios archivos PDF en un solo PDF en Linux

Cómo ejecutar varios comandos de Linux a la vez en la terminal de Linux

5 comandos para ver el contenido de un archivo en la línea de comandos de Linux