Wie kann ich in Linux mehrere Terminal-Befehle nach einander automatisch abarbeiten lassen?

... komplette Frage anzeigen

5 Antworten

Schreib es in ein Skript und führe das aus.

Sonst kann man mit ; auch Befehle voneinander trennen.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von precursor
15.07.2016, 15:24

Ok, vielen Dank !

Ich erkundige mich mal danach wie man Skripte schreibt und wie man sie ausführen lässt.

Das mit dem ";" ist auch ein guter Hinweis, Danke !

0

Normalerweise ...

befehl A ; befehl B ; befehl C

Allerdings solltest du bei Berücksichtigung des Rückgabewertes (sprich && oder ||) Subshells benutzen:

( befehl A && befehl B ) ; ( befehl C || befehl D )

In diesem Beispiel wird Befehl B nur ausgeführt, wenn Befehl A erfolgreich war, und IN JEDEM FALL danach Befehl C. Befehl D hingegen NUR wenn Befehl C gescheitert ist. :)

Das wird aber schon bei kurzen Ketten mit mehr als drei Kommandos sehr unübersichtlich, also höre lieber auf die anderen und packe alles ordentlich in eine ausführbare Skriptdatei! :)

Viel Spaß! :)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von precursor
15.07.2016, 18:16

Vielen Dank für deine Antwort !

1

Hallo

Wie kann ich in Linux mehrere Terminal-Befehle nach einander automatisch abarbeiten lassen?

Indem Du die Kommandos Zeilenweise in eine Datei (in dem Fall ist es ein Shell Script) schreibst und diese ausführbar machst.

dpkg -l 'linux-' | sed '/^ii/!d;/'"$(uname -r | sed "s/(.)-([^0-9]+)/\\1/")"'/d;s/^[^ ]* [^ ]* ([^ ])./\\1/;/[0-9]/!d' | xargs sudo apt-get -y purge

Kannst Du mal erläutern was dieses Konstrukt (bei Dir) für eine Aufgabe hat, am besten wie sieht Der Teil bis zur ersten Pipe aus und wie soll er denn danach aussehen?

Linuxhase

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von precursor
15.07.2016, 22:27

Von Zeit zu Zeit bekomme ich von der Aktualisierungsverwaltung die Nachricht, dass eine Aktualisierung des Systems nicht möglich ist, weil nicht genügend Speicherplatz vorhanden ist.

Wenn ich die oben genannten Befehle lieb und brav haargenau so eingebe, wie ich sie oben geschrieben habe, dann klappt die Aktualisierungsverwaltung wieder und alles klappt völlig reibungslos genau so wie es soll. Diese Anleitung hatte ich von einer Linux-Webseite, ich weiß nicht mehr welche es war.

sudo apt-get install g++

muss ich außerdem noch hinzufügen, weil g++ jedes mal bei der Prozedur von oben gelöscht wird, ich weiß nicht warum.

Es klappt auf jeden Fall alles genau so wie es soll und es löst meine Probleme mit der Fehlermeldung wegen zu wenig Speicherplatz.

0

Vielleicht noch als Anmerkung zum bereits Gesagten:

Die Trennung der Befehle durch ; bewirkt, dass bei foo ; bar bar auch ausgefuehrt wird, wenn foo fehlschlaegt (return code != 0), die Trennung durch && bewirkt, dass bei foo && bar bar nur ausgefuehrt wird, wenn foo erfolgreich war.

cheers | barnim

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von precursor
21.07.2016, 16:39

Danke für deine Antwort !

0

Schreibs dir in ein Script (also Textdatei, die mit "#!/bin/bash" oder "#!/bin/sh" oder welche Shell du verwenden willst beginnt und ausführbar gemacht wurde), vorzugsweise im Pfad (z.B. /usr/local/bin oder ~/bin falls vorhanden, sonst ggf. anlegen und dem Pfad hinzufügen).

Wenn du sichergehen willst, dass der nächste Befehl nur ausgeführt wird, wenn der vorige erfolgreich abgearbeitet wurde, verwende && zwischen allen Befehlen  https://wiki.ubuntuusers.de/Shell/Operatoren/

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von precursor
15.07.2016, 16:26

Vielen Dank für deine Antwort !

0
Kommentar von guenterhalt
15.07.2016, 19:40

richtig!

die erste Zeile mit  #!/bin/bash oder ... ist aber überflüssig, da keine Shell-Befehle benötigt werden. 

Eine Datei mit n Zeilen mit je einem   Befehle + Parameter  reichen da aus.

Zum Start kann man

bash <Name-der-Datei> 

benutzen oder aber einmalig 

chmod +x <Name-der-Datei>

und dann so oft wie notwendig

./<Name-der-Datei>

( ./ ist aber auch nur dann notwendig, wenn das Directory in der <Name-der-Datei> steht, nicht in $PATH steht)

2

Was möchtest Du wissen?