Come eseguire diversi comandi uno dopo l'altro con una richiesta al terminale (senza utilizzare un file)?


22

Potrei (1) preparare un file con comandi digitati separati da end-line, (2) renderlo eseguibile, (3) eseguirlo da un gestore di file system o dal terminale.

Ma questo è ridicolo per insiemi di comandi non ripetibili e sempre diversi.

Posso invece digitare quei comandi sul terminale in una richiesta?

Non conosco il carattere di fine linea per il terminale: Ctrl, Shift o Alt con Invio non funzionano.  


1
Su una riga comandi, i comandi possono essere separati con un punto e virgola.
Giovanni 1024,

Risposte:


27

È possibile separare i comandi con &&o ;.

  • && esegue il comando successivo solo se il precedente è uscito con stato 0 (ha avuto esito positivo):

    command1 && command2 && command3
    
  • ; esegue tutti i comandi, anche se il precedente esce con uno stato diverso da zero:

    command1; command2; command3
    

Puoi combinare questi separatori come desideri.


6
per command1 && command2command2 verrà eseguito solo se command1 ha esito positivo.
souravc,


@souravc: ho fatto una modifica, grazie, ho imparato qualcosa.
MrVaykadji,

se combinando sudo apt upgradee sudo systemctl reboot, dovresti aggiungere 'sudo' due volte, o 'ricorderà' sudo per il secondo comando?
Koen

9

Se sei interessato a digitare ciascun comando sulla propria riga in un'unica richiesta, puoi utilizzare il seguente metodo:

  • Inizia la tua richiesta (prima riga) con if :; then(questo significa: se vero, allora fallo) e premi Enter; il tuo prompt cambierà ora in >e nulla verrà eseguito.

  • Digita i tuoi comandi, ognuno seguito da Enter

  • Termina la tua richiesta con con fi(fine della ifcondizione precedente ) e premi Enter. Ora tutti i tuoi comandi verranno eseguiti nell'ordine indicato.

Esempio:

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: / $

if true; thenpuò essere più chiaro da leggere se lo si desidera. :può essere confuso ;a prima vista.
Kiri,

4

Innanzitutto, metti un {a sua linea.
Quindi, inserisci i tuoi comandi.
Quindi, inserire a }su una nuova riga e premere Enter. I tuoi comandi verranno eseguiti.

Esempio:

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

che stamperà (tutto in una volta, senza alcuna richiesta in mezzo):

list
of
commands
to run at once

Come nota a margine, { .. }è la sintassi di raggruppamento del comando Bash. È spesso utile in combinazione con &&o ||('e', e 'o' rispettivamente)


È lo stesso che if :; thenho già menzionato? O è leggermente diverso?
MrVaykadji,

1
@MrVaykadji È lo stesso risultato, ma un metodo diverso. if :esegue un test sul comando null, che restituirà sempre true. { .. }raggruppa semplicemente i comandi. Personalmente trovo { .. }più facile da ricordare.
Kiri,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.