Comment exécuter plusieurs commandes les unes après les autres avec une seule requête au terminal (sans utiliser de fichier)?

22

Je pourrais (1) préparer un fichier avec des commandes tapées séparées par une ligne de fin, (2) le rendre exécutable, (3) l'exécuter à partir d'un gestionnaire de système de fichiers ou du terminal.

Mais c'est ridicule pour les ensembles de commandes non répétables et à chaque fois.

Puis-je saisir ces commandes sur le terminal dans une seule demande?

Je ne connais pas le caractère de fin de ligne pour le terminal - Ctrl, Maj ou Alt avec Entrée ne fonctionne pas.  

Esamo
la source
1
Sur une ligne de commande, les commandes peuvent être séparées par un point-virgule.
John1024

Réponses:

27

Vous pouvez séparer les commandes avec &&ou ;.

  • && n'exécute la commande suivante que si la précédente s'est terminée avec le statut 0 (a réussi):

    command1 && command2 && command3
    
  • ; exécute toutes les commandes, même si la précédente se termine avec un état non nul:

    command1; command2; command3
    

Vous pouvez combiner ces séparateurs à votre guise.

MrVaykadji
la source
6
pour command1 && command2command2 ne sera exécutée que si command1 a réussi.
souravc
Belles discussions, messages pertinents / similaires: askubuntu.com/questions/334994/… stackoverflow.com/questions/13077241/…
gevang
@souravc: J'ai fait un montage, merci, j'ai appris quelque chose.
MrVaykadji
si vous combinez sudo apt upgradeet sudo systemctl reboot, auriez-vous besoin d'ajouter "sudo" deux fois, ou "se souviendra-t-il" de sudo pour la deuxième commande?
Koen
9

Si vous êtes intéressé à taper chaque commande sur sa propre ligne dans une seule demande, vous pouvez utiliser la méthode suivante:

  • Commencez votre demande (première ligne) par if :; then(cela signifie: si c'est vrai, faites-le) et appuyez sur Enter; votre invite changera maintenant >et rien ne sera exécuté.

  • Tapez vos commandes, chacune suivie de Enter

  • Terminez votre demande avec avec fi(fin de la ifcondition ci-dessus ) et appuyez sur Enter. Maintenant, toutes vos commandes seront exécutées dans l'ordre donné.

Exemple:

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
la source
if true; thenpeut être plus clair à lire si vous le souhaitez. :peut être confondu avec le ;premier coup d'œil.
kiri
4

Tout d'abord, mettez un {sur sa propre ligne.
Ensuite, insérez vos commandes.
Ensuite, mettez a }sur une nouvelle ligne et appuyez sur Enter. Vos commandes seront exécutées.

Exemple:

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

qui imprimera (tout à la fois, sans invite entre les deux):

list
of
commands
to run at once

En remarque, { .. }est la syntaxe de regroupement des commandes Bash. Il est souvent utile en conjonction avec &&ou ||('et', et 'ou' respectivement)

kiri
la source
Est-ce la même chose que celle if :; thendéjà mentionnée? Ou est-ce légèrement différent?
MrVaykadji
1
@MrVaykadji C'est le même résultat, mais une méthode différente. if :exécute un test sur la commande null, qui retournera toujours true. { .. }regroupe simplement les commandes. Personnellement, je trouve { .. }plus facile à retenir.
kiri