Sie können mehrere Befehle durch trennen ;
, damit sie nacheinander ausgeführt werden. Beispiel:
really_long_script.sh ; echo Finished
Wenn Sie das nächste Programm nur ausführen möchten, wenn das Skript mit dem Rückkehrcode 0 beendet wurde (was normalerweise bedeutet, dass es korrekt ausgeführt wurde), dann:
really_long_script.sh && echo OK
Wenn Sie das Gegenteil wünschen (dh nur fortfahren, wenn der aktuelle Befehl fehlgeschlagen ist), dann:
really_long_script.sh || echo FAILED
Sie könnten Ihr Skript in einem Hintergrund laufen (aber Vorsicht, Skripte Ausgang ( stdout
und stderr
) würde weiterhin das Terminal gehen , wenn Sie es irgendwo Redirect), und dann wait
für sie:
really_long_script.sh &
dosomethingelse
wait; echo Finished
Wenn Sie das Skript bereits ausgeführt haben, können Sie es mit anhalten Ctrl-Z
und dann Folgendes ausführen:
fg ; echo Finished
Wobei fg
der angehaltene Prozess in den Vordergrund gerückt wird ( bg
würde ihn im Hintergrund laufen lassen, ähnlich wie bei "Begonnen mit" &
)
fg
der Wert des Jobs zurückgegeben wird, der fortgesetzt wird, können Sie ihn verwendenfg && echo Finished
, um sicherzustellen, dass der Befehl erfolgreich ausgeführt wird, bevor Sie den anderen Befehl ausführen.Sie können auch die Jobsteuerung von bash verwenden. Wenn du angefangen hast
Drücken Sie dann Strg + Z, um es anzuhalten:
um den Job im Hintergrund neu zu starten (so als ob er mit gestartet würde
really_long_script.sh &
). Dann können Sie mit auf diesen Hintergrundjob wartenDabei ist N die Job-ID (wahrscheinlich 1, wenn Sie keine anderen Hintergrundjobs ausgeführt haben), die ebenfalls wie
[1]
oben angezeigt wird .quelle
Wenn der Prozess auf dem aktuellen tty nicht ausgeführt wird, versuchen Sie Folgendes:
quelle
watch
. Super kurze Antwort und man lernt eine neue nützliche Art der Verwendung der UhrEs stellt sich heraus, dass dies nicht so schwierig ist: Sie können einfach den nächsten Befehl in das Fenster eingeben, während der vorhandene ausgeführt wird, die Eingabetaste drücken und wenn der erste beendet ist, wird der zweite Befehl automatisch ausgeführt.
Ich schätze, es gibt elegantere Möglichkeiten, aber das scheint zu funktionieren.
Bearbeiten, um hinzuzufügen, dass Sie, wenn Sie eine Warnung ausführen möchten, nachdem der Befehl ausgeführt wurde, diese Aliase in .bashrc erstellen und dann ausführen können,
alert
während sie ausgeführt wird:quelle
Vor einiger Zeit habe ich ein Skript geschrieben, um auf das Ende eines anderen Prozesses zu warten.
NOISE_CMD
könnte sowas seinnotify-send ...
, vorausgesetzt dasDISPLAY
ist richtig eingestellt.Machen Sie einfach sofort ein paar Geräusche. Dieses Verhalten ermöglicht der Einfachheit halber Folgendes (sagen wir, Sie rufen das folgende Skript auf
alarm.sh
):Natürlich können Sie mit einem solchen Skript viele witzige Dinge tun, zum Beispiel eine Instanz
alarm.sh
auf eine Instanz von warten lassenalarm.sh
, die auf einen anderen Befehl wartet. Oder führen Sie einen Befehl aus, nachdem eine Aufgabe eines anderen angemeldeten Benutzers beendet wurde ...>: DEine frühere Version des obigen Skripts könnte interessant sein, wenn Sie eine Abhängigkeit von
pgrep
Prozess-IDs vermeiden und akzeptieren möchten, diese selbst zu suchen:Leicht vom Thema abweichend, aber in ähnlichen Situationen nützlich: Möglicherweise
reptyr
ist ein Tool von Interesse , das einen Prozess aus einer (übergeordneten) Shell "stiehlt" und in der aktuellen Shell ausführt. Ich habe ähnliche Implementierungen ausprobiert und binreptyr
die schönste und zuverlässigste für meine Zwecke.quelle