AppleScript führt sich nach einem von ihm initiierten Neustart erneut aus. Wie kann man das vermeiden?

Ich habe ein Shell-Skript, das von einer AppleScript-App ausgeführt wird. Dieses Shell-Skript startet die Maschine irgendwann mit shutdown -r now.

Wie kann ich verhindern, dass die AppleScript-Anwendung nach dem Neustart automatisch erneut gestartet wird?

  • Die App ist nicht in den Startelementen enthalten
  • Die App wird wie jede andere geöffnete App erneut gestartet, wenn das Shell-Skript OS X neu startet

Die Reihenfolge ist diese:

  1. Ich doppelklicke auf die AppleScript-App
  2. AppleScript startet ein Shell-Skript im Terminal
  3. Das Shell-Skript startet irgendwann das System neu
  4. Die AppleScript-App startet nach dem Neustart erneut
Benötigen Sie weitere Informationen ... wie startet die App jetzt? Haben Sie die App zu Ihren Startobjekten hinzugefügt?
Wenn Sie manuell neu starten, haben Sie "Fenster beim erneuten Anmelden erneut öffnen" aktiviert (mit einem Häkchen versehen)?

Antworten (4)

Lassen Sie Ihr AppleScript eine leere Datei an einen vordefinierten Ort schreiben und beim Start des Skripts auf deren Existenz testen. Wenn die Datei bereits vorhanden ist, löschen Sie sie und beenden Sie das Skript. Andernfalls fahren Sie wie gewohnt fort und starten Sie neu.

Sie können versuchen, den Shell-Befehl mit umzuleiten

do shell script "insert_your_command &>/dev/null &"

und sagen Sie dann, dass die App beendet werden soll

BEARBEITEN
Sie können auch eine Verzögerung hinzufügen, bevor Sie den Befehl umleiten.

 do shell script "(sleep 5 ; insert_your_command) &>/dev/null &"
Die App hat möglicherweise keine Zeit zum Beenden. Lassen Sie das Shell-Skript möglicherweise mit osascript -e 'Tell application "Script Editor" to quit" beenden, bevor es heruntergefahren wird. Aber Sie müssen das Shell-Skript immer noch mit dem abschließenden & trennen, oder es wird beendet, wenn die App beendet wird.
Die AppleScript-App des OP muss zum Beenden aufgefordert werden, nicht "Script Editor".

Ich vermute, OS X stellt den Status der Apple Script App nach dem Neustart wieder her. Sie könnten möglicherweise versuchen, das Apple-Skript direkt vor dem Neustartbefehl seinen eigenen Anwendungsstatus löschen zu lassen, obwohl ich nicht überprüft habe, ob dies funktioniert oder möglich ist. Es sollte sich in ~/Library/Saved Application State/ befinden.

Ich glaube nicht, dass AppleScript wissen kann, wann es seinen Status vor dem Neustart löschen soll, da der Neustart durch einen Shell-Befehl initiiert wird.
Aber wie Sie sagten, wird das Shell-Skript von der Applescript-App ausgeführt. Ist die App noch geöffnet, wenn das Shell-Skript ausgeführt wird? Wenn ja, könnte es seinen Zustand beim Neustart wiederherstellen.
Ja, die App ist noch geöffnet, wenn das Shell-Skript gestartet wird (in einem Terminalfenster).

Okay gefunden.

Das Shell-Skript musste die folgenden Zeilen enthalten:

osascript -e 'tell app "System Events" to restart'
killall "Terminal"

Die obigen Shell-Befehle initiieren den Neustart über einen Ad-hoc-Apple-Script-Befehl, beenden das Terminal jedoch unmittelbar danach. Dies hat den Effekt, dass die Apple Script-App kurz vor dem Neustart von OS X beendet wird. Daher fügt OS X die Apple Script-App nicht in die Liste der geöffneten Apps ein, die nach dem Neustart erneut geöffnet werden müssen.

Zwei Nebenwirkungen dieser Methode:

  • Der Neustart über diesen Apple Script-Befehl gibt dem Benutzer die Möglichkeit, nicht gespeicherte Arbeit aus geöffneten Apps zu speichern, im Gegensatz zum shutdown -r nowShell-Befehl, der einen sofortigen Neustart erzwingt.
  • Terminal wird immer noch abrupt beendet, was ein Problem sein kann, wenn Prozesse in anderen Terminal-Fenstern/Registerkarten ausgeführt werden