Befehl ausführen, nachdem der vorherige abgeschlossen ist

Befehl ausführen, nachdem der vorherige abgeschlossen ist

Gibt es einen Terminalemulator, der es dem Benutzer ermöglicht, einen Befehl auszuführen, nachdem der aktuell laufende beendet wurde?

Ich suche eine Software, nicht eine Erklärung, wie man Befehle aneinanderreiht (zum Beispiel über &&oder ;). Ich möchte einfach oft etwas tun, nachdem etwas anderes beendet ist, aber nicht alles im Voraus planen. Ein kleiner Kontextmenüeintrag namens „Ausführen, nachdem aktueller Befehl beendet ist“, der ein neues Terminalfenster öffnet und genau das tut, wäre großartig.

Antwort1

Ich gehe davon aus, dass Sie eine Bash-CLI verwenden. Es gibt mindestens zwei Möglichkeiten, dies zu tun, je nachdem, wie weit Sie im Voraus planen möchten.

Wenn Sie einen Befehl und eingeben enterund anschließend entscheiden, dass Sie einen anderen Befehl ausführen möchten, haben Sie folgende Möglichkeiten:

001 $ date; sleep 10
002 Mon, Jan 25, 2016  3:08:35 PM
003 tty; date
004 $ tty; date
005 /dev/pty2
006 Mon, Jan 25, 2016  3:08:45 PM

Anmerkungen:

  • Zeilennummern ("001 ...") werden hinzugefügt
  • Zeile 001: Zwei Befehle werden nacheinander ausgeführt ;, der zweite dauert lange
  • Zeile 002: die unmittelbare Ausgabe von „date“ in Zeile 001 als Referenz
  • Zeile 003: Der Benutzer gibt zusätzliche Befehle ein, während der Befehl „sleep“ aus Zeile 001 noch ausgeführt wird. Die Eingabe wird zwar wiederholt, aber erst interpretiert, wenn „sleep“ abgeschlossen ist.
  • Zeile 004: $Es erscheint eine Eingabeaufforderung, die das Ende der Ausführung des zweiten Befehls in Zeile 001 markiert, der Rest ist ein erneutes Echo von Zeile 003.
  • Zeile 005: Ausgabe des in Zeile 003 eingegebenen Befehls „tty“
  • Zeile 006: Ausgabe des in Zeile 003 eingegebenen Befehls „date“, vergleiche mit Zeile 002

Wenn man allerdings schon im Vorfeld weiß, dass man nach einem ersten Kommando etwas anderes starten möchte, aber noch nicht weiß, was, kann man explizit darauf warten, indem man:

006 $ date; sleep 20 &
007 Mon, Jan 25, 2016  3:13:52 PM
008 [1] 504840
009 $ wait 504840; tty; date
010 [1]+  Done                    sleep 20
011 /dev/pty2
012 Mon, Jan 25, 2016  3:14:12 PM

Anmerkungen:

  • Zeile 006: 'date' als Referenz, und dann wird der Befehl 'sleep' mit final in den Hintergrund verschoben&
  • Zeile 007: Ausgabe von „Datum“ in Zeile 006 als Referenz
  • Zeile 008: Ausgabe von &Zeile 006, die die PID des Befehls „sleep“ angibt
  • Zeile 009: „wait“ wartet, bis der Prozess mit der benannten PID abgeschlossen ist.
  • Zeile 010: „sleep“ in Zeile 006 ist abgeschlossen, dann wird „tty; date“ interpretiert
  • Zeile 011: Ausgabe von 'tty' in Zeile 009
  • Zeile 012: Ausgabe von 'date' in Zeile 009, vergleiche mit Zeile 007

Antwort2

Sie können Ihren neuen Befehl in das Shell-Fenster eingeben oder einfügen, in dem der aktuelle Befehl ausgeführt wird. Die Shell erkennt ihn und führt ihn aus, nachdem der aktuelle Befehl abgeschlossen ist.

Kein zusätzlicher Menüeintrag nötig.

Z.B:

$ command1
command2
$ $

command1(Die wiederholte Eingabeaufforderung wird gedruckt, da die Shell Sie nach der Ausführung vor dem Start auffordert command2.)

Beachten Sie, dass wenn Sie töten command1mitkill, wird dann command2sofort ausgeführt, aber wenn Sie Ctrl-Cin dieser Shell eingeben, wird dies abgebrochenbeideBefehle.

verwandte Informationen