Wie führe ich mehrere Befehle nacheinander mit einer Anfrage an das Terminal aus (ohne eine Datei zu verwenden)?

22

Ich könnte (1) eine Datei mit typisierten Befehlen vorbereiten, die durch eine Endzeile getrennt sind, (2) sie ausführbar machen, (3) sie von einem Dateisystem-Manager oder dem Terminal ausführen.

Aber das ist lächerlich für nicht wiederholbare und immer wieder andere Befehlssätze.

Kann ich diese Befehle stattdessen in einer Anfrage an das Terminal senden?

Ich kenne kein Endzeilenzeichen für das Terminal - Strg, Umschalt oder Alt mit der Eingabetaste funktionieren nicht.  

Esamo
quelle
1
In einer Befehlszeile können Befehle durch ein Semikolon getrennt werden.
John1024

Antworten:

27

Sie können Befehle mit &&oder trennen ;.

  • && Führt den nächsten Befehl nur aus, wenn der vorherige mit dem Status 0 beendet wurde (erfolgreich war):

    command1 && command2 && command3
    
  • ; Führt alle Befehle aus, auch wenn der vorherige mit einem Status ungleich Null beendet wird:

    command1; command2; command3
    

Sie können diese Trennzeichen beliebig kombinieren.

MrVaykadji
quelle
6
for command1 && command2command2 wird nur ausgeführt, wenn command1 erfolgreich ist.
Souravc
Nette Diskussionen, relevante / ähnliche Beiträge: askubuntu.com/questions/334994/… stackoverflow.com/questions/13077241/…
gevang
@souravc: Ich habe einen Schnitt gemacht, danke, ich habe etwas gelernt.
MrVaykadji
Wenn Sie sudo apt upgradeund kombinieren sudo systemctl reboot, müssen Sie "sudo" zweimal hinzufügen, oder wird sich sudo für den zweiten Befehl "merken"?
Koen
9

Wenn Sie daran interessiert sind, jeden Befehl in einer einzelnen Anforderung in einer eigenen Zeile einzugeben, können Sie die folgende Methode verwenden:

  • Beginnen Sie Ihre Anfrage (erste Zeile) mit if :; then(dies bedeutet: Wenn ja, dann tun Sie dies) und drücken Sie Enter; Ihre Eingabeaufforderung ändert sich jetzt in >und es wird nichts ausgeführt.

  • Geben Sie Ihre Befehle ein, gefolgt von Enter

  • Beenden Sie Ihre Anfrage mit fi(Ende der obigen ifBedingung) und drücken Sie Enter. Jetzt werden alle Ihre Befehle in der angegebenen Reihenfolge ausgeführt.

Beispiel:

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
quelle
if true; thenkann klarer zu lesen sein, wenn dies gewünscht wird. :kann mit dem ;auf den ersten Blick verwechselt werden .
kiri
4

Stellen Sie zuerst eine {eigene Zeile ein.
Fügen Sie dann Ihre Befehle ein.
Setzen Sie dann ein }Zeichen in eine neue Zeile und drücken Sie Enter. Ihre Befehle werden ausgeführt.

Beispiel:

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

was gedruckt wird (alles auf einmal, ohne Aufforderung dazwischen):

list
of
commands
to run at once

Als Randnotiz { .. }ist die Bash-Befehl Gruppierungssyntax. Es ist oft in Verbindung mit &&oder ||('und' und 'oder') nützlich.

kiri
quelle
Ist das dasselbe, das if :; thenbereits erwähnt wurde? Oder ist es etwas anders?
MrVaykadji
1
@ MrVaykadji Es ist das gleiche Ergebnis, aber eine andere Methode. if :Führt einen Test für den Befehl null aus, der immer true zurückgibt. { .. }gruppiert einfach die Befehle zusammen. Ich persönlich finde es { .. }leichter, mich zu erinnern.
kiri