GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie führe ich einen Befehl aus, nachdem ein bereits laufender, bestehender beendet wurde?

Sie können mehrere Befehle durch ; trennen , also werden sie sequentiell ausgeführt, zum Beispiel:

really_long_script.sh ; echo Finished

Wenn Sie das nächste Programm nur ausführen möchten, wenn das Skript mit dem Rückgabecode 0 beendet wurde (was normalerweise bedeutet, dass es korrekt ausgeführt wurde), dann:

really_long_script.sh && echo OK

Wenn Sie das Gegenteil wollen (d. h. nur fortfahren, wenn der aktuelle Befehl fehlgeschlagen ist), dann:

really_long_script.sh || echo FAILED

Sie könnten Ihr Skript im Hintergrund ausführen (aber Vorsicht, die Skriptausgabe (stdout und stderr ) würde weiterhin zu Ihrem Terminal gehen, es sei denn, Sie leiten es irgendwohin um), und dann wait dafür:

really_long_script.sh &
dosomethingelse
wait; echo Finished

Wenn Sie das Skript bereits ausgeführt haben, können Sie es mit Ctrl-Z anhalten , und führen Sie dann Folgendes aus:

fg ; echo Finished

Wobei fg bringt den angehaltenen Prozess in den Vordergrund (bg würde es im Hintergrund laufen lassen, so ziemlich wie mit & begonnen )


Sie können auch die Jobsteuerung von bash verwenden. Wenn Sie begonnen haben

$ really_long_script.sh

drücken Sie dann Strg+z, um es zu unterbrechen:

^Z
[1]+  Stopped                 really_long_script.sh
$ bg

um den Job im Hintergrund neu zu starten (so als hätte man ihn mit really_long_script.sh & gestartet ). Dann können Sie mit

auf diesen Hintergrundjob warten
$ wait N && echo "Successfully completed"

wobei N die Job-ID ist (wahrscheinlich 1, wenn Sie keine anderen Hintergrundjobs ausgeführt haben), die auch als [1] angezeigt wird oben.


Wenn der Prozess nicht auf dem aktuellen tty läuft, versuchen Sie Folgendes:

watch -g ps -opid -p <pid>; mycommand

Linux
  1. Wie führen wir einen in einer Variablen gespeicherten Befehl aus?

  2. Wie führe ich einen Befehl als Systemadministrator (root) aus?

  3. Wie integriere ich den Mv-Befehl nach dem Find-Befehl?

  4. Wie kann ich Perl-One-Liner-Befehlszeilenskripts ordnungsgemäß ausführen?

  5. Wie überprüfe ich, ob ssh-agent bereits in bash läuft?

So führen Sie den Sudo-Befehl ohne Passwort aus

So führen Sie Linux-Befehle im Hintergrund aus

[Bash-Tipps] How To cd und ls in einem Befehl

[Bash-Tipps] Wie cp oder mv und cd in einem Befehl ausgeführt werden

So führen Sie einen Befehl regelmäßig unter Linux mit Watch aus

So führen Sie mehrere Linux-Befehle in einem einzigen Befehl aus