¿Cómo ejecutar varios comandos uno tras otro con una solicitud al terminal (sin usar un archivo)?

22

Podría (1) preparar un archivo con comandos escritos separados por la línea final, (2) hacer que sea ejecutable, (3) ejecutarlo desde un administrador de sistema de archivos o la terminal.

Pero esto es ridículo para conjuntos de comandos no repetibles y cada vez más diversos.

¿Puedo escribir esos comandos en el terminal en una solicitud?

No conozco el carácter de la línea final para la terminal: Ctrl, Shift o Alt con Enter no funcionan.  

Esamo
fuente
1
En una línea de comando, los comandos se pueden separar con un punto y coma.
John1024

Respuestas:

27

Puede separar comandos con &&o ;.

  • && solo ejecuta el siguiente comando si el anterior salió con el estado 0 (fue exitoso):

    command1 && command2 && command3
    
  • ; ejecuta todos los comandos, incluso si el anterior sale con un estado distinto de cero:

    command1; command2; command3
    

Puede combinar estos separadores como desee.

MrVaykadji
fuente
66
para command1 && command2command2 solo se ejecutará si command1 es exitoso.
souravc 01 de
Bonitas discusiones, publicaciones relevantes / similares: askubuntu.com/questions/334994/… stackoverflow.com/questions/13077241/…
gevang
@souravc: hice una edición, gracias, aprendí algo.
MrVaykadji 01 de
si se combina sudo apt upgradey sudo systemctl reboot, ¿necesitaría agregar 'sudo' dos veces o 'recordará' sudo para el segundo comando?
Koen
9

Si está interesado en escribir cada comando en su propia línea en una sola solicitud, puede usar el siguiente método:

  • Comience su solicitud (primera línea) con if :; then(esto significa: si es verdadero, luego hágalo) y presione Enter; su solicitud cambiará ahora >y no se ejecutará nada.

  • Escriba sus comandos, cada uno seguido de Enter

  • Termine su solicitud con fi(fin de la ifcondición anterior ) y presione Enter. Ahora todos sus comandos se ejecutarán en el orden dado.

Ejemplo:

radu@Radu: ~ $ if :; then
> echo 'something'
> echo 'something else'
> echo 'List current directory contents:'
> ls
> echo 'Change current directory with root directory:'
> cd
> #finish
> fi
something
something else
List current directory contents:
Backups            Desktop           forma3d  Public      Untitled txt.txt~
bin                Documente         Music    Templates   Videos
configuration.php  examples.desktop  passwd~  tmp~
Downloads          file~             Poze     Ubuntu One
Change current directory with root directory:
radu@Radu: / $
Radu Rădeanu
fuente
if true; thenpuede ser más claro de leer si así lo desea. :puede confundirse con el ;a primera vista.
kiri
4

Primero, ponga un {en su propia línea.
Luego, inserta tus comandos.
Luego, coloque un }en una nueva línea y presione Enter. Sus comandos serán ejecutados.

Ejemplo:

{
echo list
echo of
echo commands
echo to run at once
}

que se imprimirá (todo de una vez, sin aviso en el medio):

list
of
commands
to run at once

Como nota al margen, { .. }es la sintaxis de agrupación del comando Bash. A menudo es útil junto con &&o ||('y', y 'o' respectivamente)

kiri
fuente
¿Es lo mismo que if :; thenya mencioné? ¿O es un poco diferente?
MrVaykadji 01 de
1
@MrVaykadji Es el mismo resultado, pero un método diferente. if :ejecuta una prueba en el comando nulo, que siempre devolverá verdadero. { .. }solo agrupa los comandos juntos. Personalmente me parece { .. }más fácil de recordar.
kiri