Ich versuche, einen Applescript-basierten Shell-Befehl zu erstellen, der die Vorschau-Anwendung von Mac OS X anweist, ein bestimmtes Fenster zu schließen.
#!/bin/sh
osascript <<EOF
tell application "Preview"
close "$1"
end tell
EOF
Das funktioniert aber nicht: Ich bekomme die Fehlermeldung
25:52: execution error: Preview got an error: "musixdoc.pdf" doesn’t understand the close message. (-1708)
Verwandte Frage: Wie schließe ich eine OS X-Anwendung über die Befehlszeile mit einem in meinem .bash_profile definierten Alias?
macos
shell-script
applescript
Ewan Delanoy
quelle
quelle
Antworten:
Preview.app dazu bringen, AppleScript-Befehle zu akzeptieren
Standardmäßig funktioniert die AppleScripting-Vorschau nicht, da in der Vorschau das erforderliche Wörterbuch fehlt. Um dies zu beheben, überprüfen Sie Lauris Antwort hier , in der die Einstellung
NSAppleScriptEnabled
für Preview.app erläutert wird .Beenden Sie Preview.app, öffnen Sie ein Terminal und geben Sie Folgendes ein:
Schließen eines Fensters aus einer Anwendung
1) Nach Fensterindex oder Name des Fensters
Der Befehl zum Schließen eines Fensters einer benannten Anwendung lautet ungefähr so:
… Oder wenn Sie ein benanntes Dokumentfenster schließen möchten, z
foo.jpg
.In Ihrem Shell-Skript wäre das also:
Hier ist das erste an das Skript übergebene Argument der Name des Fensters, das Sie schließen möchten, z
./quit.sh foo.jpg
. Beachten Sie, dass Sie, wenn Ihre Datei Leerzeichen enthält, den Dateinamen angeben müssen, z./quit.sh "foo bar.jpg"
.Oder wenn Sie beliebige Fenster aus einer Anwendung schließen möchten, verwenden Sie Folgendes:
Hier würden Sie
./quit.sh Preview foo.jpg
zum Beispiel verwenden.2) Nach Dateiname
Wenn Sie ein Fenster schließen möchten, das zu einem bestimmten Dokument gehört, aber den Dateinamen angeben, benötigen Sie etwas anderes. Dies liegt daran, dass eine mehrseitige PDF-Datei als angezeigt werden
foo.pdf (Page 1 of 42)
kann, Sie sie jedoch nurfoo.pdf
an AppleScript übergeben möchten .Hier iterieren wir durch die Fenster und vergleichen die Dateinamen mit dem an das Skript übergebenen Argument:
Jetzt können Sie einfach anrufen
./quit.sh foo.pdf
. Allgemein gilt für alle Apps mit benannten Dokumentfenstern Folgendes:Vorsichtsmaßnahme: Automatisch schließende Preview.app
Preview.app ist eine dieser Anwendungen, die automatisch beendet wird, sobald das letzte Dokumentfenster geschlossen wird. Dies geschieht, um Speicherplatz zu sparen und "aufzuräumen". Führen Sie Folgendes aus, um dieses Verhalten zu deaktivieren:
Um dies rückgängig zu machen, wechseln Sie natürlich
TRUE
zuFALSE
.Verwenden von Funktionen anstelle von Skripten
Schließlich würde ich vorschlagen, Ihre Skripte in eine Funktion einzufügen, die immer in Ihrer Shell verfügbar ist. Fügen Sie dazu die Skripte zu Ihrem hinzu
~/.bash_profile
. Erstellen Sie diese Datei, wenn sie nicht vorhanden ist.Sobald Sie Ihr Bash-Profil gespeichert und die Shell neu gestartet haben, können Sie
cw Preview foo.pdf
von überall aus anrufen .quelle
tell application "Preview" to windows
, erhalten Sie dann Ergebnisse? Welches genaue Skript führen Sie aus?Die Antwort von slhck sieht gut und gründlich aus. Vorsicht, Ausführung der dritten Codezeile :
'scheint' dazu geführt zu haben, dass Preview bei jedem Start wie folgt abstürzt:
Laut dem Handbuch für Codesigns bedeutet dies, dass das Codezeichen
-f
ersetzt und die vorhandene Signatur ersetzt werden muss und dass-s
der Code auf dem angegebenen Pfad signiert werden muss. In diesem Fall-
Anscheinend ist die Vorschau jetzt falsch signiert und unbrauchbar. :(
quelle