Warten Sie, bis eine bestimmte Anwendung beendet wurde, und starten Sie dann eine andere

StackOverflow https://stackoverflow.com//questions/24018890

  •  21-12-2019
  •  | 
  •  

Frage

Unter OS X möchte ich einen Osascript-Befehl ausführen, der wartet, bis eine bestimmte Anwendung vollständig angegeben ist.app-Pfad wurde beendet, dann starten Sie eine andere Anwendung, z.wobei /usr/bin/open -n /Applications/MyApp.app.

Wie erreiche ich das Warten, bis die Anwendung beendet wurde?

War es hilfreich?

Lösung

Ein gängiger Ansatz besteht darin, eine Warteschleife durchzuführen, zum Beispiel mit pgrep:

while pgrep -f /Applications/TextEdit.app 2>/dev/null ; do sleep 1.0 ; done

Leider wird dies zu viel schlafen und den Start der anderen Anwendung verzögern.

Wenn Sie wissen, dass die Anwendung ausgeführt wird, können Sie alternativ Folgendes verwenden /usr/bin/open:

open -g -W /Applications/TextEdit.app

Leider wird dadurch die Anwendung geöffnet, wenn sie nicht ausgeführt wurde.Sie können überprüfen, ob es ausgeführt wird, bevor Sie anrufen /usr/bin/open, aber das wäre nicht atomar:es könnte geschlossen werden und der Befehl öffnen könnte es neu starten.

Beide können in osascript gekapselt werden (obwohl es wahrscheinlich nicht viel Sinn ergibt).

osascript -e 'do shell script "while pgrep -f /Applications/TextEdit.app 2>/dev/null ; do sleep 1.0 ; done"'
osascript -e 'do shell script "open -g -W /Applications/TextEdit.app"'

Als Randnotiz: open -W führt tatsächlich eine kqueue-Wartezeit (Wartezeit ohne Abfrage) für den Prozess durch.Möglicherweise gibt es andere Befehle, die kqueue aufrufen und dieselbe Aufgabe ausführen, ohne das Risiko eines Neustarts der Anwendung einzugehen.Es ist ziemlich einfach in C zu implementieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top