scripts script paso hacer español ejemplos como comandos basicos linux command-line

script - Ejecutar combinar varios comandos de linux en una línea



scripts bash ejemplos (9)

¿Cuál es la utilidad de un único Ampersand? Esta mañana, hice un lanzador en el panel XFCE (en Manjaro + XFCE) para lanzar 2 administradores de contraseñas simultáneamente:

sh -c "keepassx && password-gorilla" or sh -c "keepassx; password-gorilla"

Pero no funciona como yo quiero. IE, la primera aplicación se inicia pero la segunda solo se inicia cuando se cierra la anterior: - /

Sin embargo, encontré que (con solo un signo):

sh -c "keepassx & password-gorilla"

y funciona como quiero ahora ...

Estoy intentando fusionar varios comandos de Linux en una línea para realizar la operación de implementación. Por ejemplo

cd /my_folder rm *.jar svn co path to repo mvn compile package install


Encuentro muchas respuestas para este tipo de pregunta engañosa

Modificado de esta publicación: https://www.webmasterworld.com/linux/3613813.htm

El siguiente código creará una ventana bash y funciona exactamente como una ventana bash. Espero que esto ayude. Demasiadas respuestas incorrectas / que no funcionan por ahí ...

Process proc; try { //create a bash window proc = Runtime.getRuntime().exec("/bin/bash"); if (proc != null) { BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream())); PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true); BufferedReader err = new BufferedReader(new InputStreamReader( proc.getErrorStream())); //input into the bash window out.println("cd /my_folder"); out.println("rm *.jar"); out.println("svn co path to repo"); out.println("mvn compile package install"); out.println("exit"); String line; System.out.println("----printing output-----"); while ((line = in.readLine()) != null) { System.out.println(line); } while((line = err.readLine()) != null) { //read errors } proc.waitFor(); in.close(); out.close(); err.close(); proc.destroy(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }


He encontrado que utilizando; Separar comandos solo funciona en primer plano. p.ej :

cmd1; cmd2; cmd3 & 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 línea de tubería "|" al igual que:

$ cd /my_folder | rm *.jar | svn co path to repo | mvn compile package install


Puedes separar tus comandos usando un punto y coma:

cd /my_folder;rm *.jar;svn co path to repo;mvn compile package install

¿Eso es lo que quieres decir?


Se puede utilizar como el siguiente código;

cd /my_folder && / rm *.jar && / svn co path to repo && / mvn compile package install

Funciona...


Si desea ejecutar cada comando solo si el anterior tuvo éxito, combínelos utilizando 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 lo siguen no se ejecutarán.

Si desea ejecutar todos los comandos sin importar 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 quiere el primer caso donde la ejecución del siguiente comando depende del éxito del anterior.

También puedes poner todos los comandos en un script y ejecutar eso 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 comando nuevo; si omite las barras invertidas, deberá escribir todo el comando en una sola línea).

Guarda eso en un archivo, por ejemplo, myscript , y myscript 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 entorno PATH (por ejemplo /usr/local/bin , o en algunas distribuciones de Linux ~/bin ), deberá especificar la ruta de acceso a ese script. Si está en el directorio actual, ejecutarlo con:

./myscript

Los comandos en el script funcionan de la misma manera que los comandos en el primer ejemplo; el siguiente comando solo se ejecuta si el anterior tuvo éxito. Para la ejecución incondicional de todos los comandos, simplemente liste cada comando en su propia línea:

#! /bin/sh cd /my_folder rm *.jar svn co path to repo mvn compile package install


Si desea ejecutar todos los comandos, ya sea que se ejecute el anterior, puede usar el punto y coma (;) para separar los comandos.

cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install

Si desea ejecutar el siguiente comando solo si el comando anterior tiene éxito, puede usar && para separar los comandos.

cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install

En su caso, la ejecución de comandos consecutivos parece depender de los comandos anteriores, así que use el segundo ejemplo, es decir, use && para unir los comandos.


cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install