Mein Ziel ist es, in eine Zip-Datei eine Verknüpfung aufzunehmen, anstatt meinen Kunden zu sagen, dass sie Terminal öffnen und ein Shell-Skript ausführen sollen.
Mein Deployable sieht im Wesentlichen so aus:
$ unzip Deliverable.zip
$ cd Deliverable; ls
app.jar run.sh
Skript in run.sh
:
#!/bin/sh
java -jar app.jar
Es gibt noch viel mehr im Verzeichnis; Es reicht zu sagen, dass ich das Skript aus dem Verzeichnis Deliverable ausführen muss, da ich auf Pfade relativ dazu zugreifen muss. Ich kann jedoch nicht garantieren, wo ein Kunde öffnen wird Deliverable.zip
(könnte das Ausgangsverzeichnis sein, könnte sich direkt im Download-Verzeichnis befinden usw.)
Ich habe dies gefunden , das beschreibt, wie ein neuer Workflow in Automator erstellt und dann als Anwendung gespeichert wird, um ein Shell-Skript zu starten. Ich habe versucht, das zu wickeln, run.sh
aber es heißt, es kann nicht finden run.sh
.
Jemand schlug vor, dass ich Applescript verwende, und schickte mir auch einen Link zur Verwendung von Applescript, um in das aktuelle Verzeichnis zu wechseln. Es gibt eine Applescript "Aktion" im Automator; Also habe ich damit einen neuen Workflow erstellt und ihn als Anwendung gespeichert. So sieht das aus:
Der Code:
on run {input, parameters}
tell application "Finder"
set current_path to container of (path to me) as alias
end tell
do shell script "java -jar app.jar"
return input
end run
Und das ist der Fehler, den ich bekomme, wenn ich es ausführe:
Komm schon, das sollte ziemlich einfach sein. Was mache ich hier falsch?
quelle
Antworten:
Benennen Sie Ihre .sh-Datei in .command um, und Sie können in das Verzeichnis wechseln, in dem sich die .command-Datei befindet. Am Anfang der Datei steht Folgendes:
quelle
Ich kann dort ein paar Dinge falsch sehen.
Zunächst haben Sie einen Workflow und keine Anwendung geöffnet.
Sie sollten Anwendung auswählen, wenn Sie Ihre Auswahl für den Typ der Automator-Datei treffen.
Und der Code, den Sie haben, funktioniert nicht wie erwartet, da Sie das Verzeichnis nicht geändert haben. (CD).
In dem Code, wie Sie ihn haben, wird lediglich der Pfad als Alias abgerufen und in der Variablen current_path und in einem für die Unix-Befehle ungeeigneten Format gespeichert.
Aber du benutzt es nicht.
Das aktuelle Verzeichnis ist also höchstwahrscheinlich Ihr Home-Ordner
Zu diesem Zeitpunkt ist nicht abzusehen, was gestartet werden soll.
Wenn ich es so laufen lasse, wie du es hast, bekomme ich es.
Was Sinn macht, da ich kein Java installiert habe. Aber wenn ich das tun würde, würde ich nicht erwarten, dass es die richtige Datei findet.
Das Applescript muss so aussehen.
In meinem Beispiel
Ich cd zum POSIX-Pfad des Alias in der Variablen current_path
dh von "alias" Macintosh HD: Anwendungen: "" bis "/ Anwendungen /"
Der
quoted form of
entkommt dem Pfad mit Anführungszeichen.Ich habe den Befehl / bin / ls verwendet und ihn als Demonstration hier zum Öffnen in TextEdit stdin weitergeleitet , damit Sie testen können, ob Sie den erwarteten Bereich erreichen.
Sie würden so etwas wie verwenden;
aktualisieren:
Eine andere Möglichkeit ist die Verwendung von reinem Applescript.
quelle
ls | open
Code definitiv das gewünschte Verzeichnis öffnet, was großartig ist. Aber wenn ich open anrufeClient.app
, erhalte ich:LSOpenURLsWithRole() failed with error -10665 for the file <path-to-Client.app>
- Einige Suchanfragen nach dem, was dieser Fehler bedeutet, deuteten auf ein Berechtigungsproblem hin. Ich habe es überprüft und+x
Flags gesetzt. Ich habe auch versucht dies , und das hat nicht funktioniert (mit dem gleichen Fehler).Client.app
über den Finder (Doppelklick) auch zu demselben PowerPC-Fehler-Popup führt.I call open Client.app
Ist dies die Automator-App ? Soweit ich im Automator verstehe, haben Sie den Applescript-Code :do shell script "cd " & quoted form of (POSIX path of current_path) & " ;\"java -jar app.jar\""
. Wo verwenden Sie denopen
Befehl? Soweit ich verstehe, was Sie tun, müssen Sie es nicht verwenden. Die Clients verwenden einen Doppelklick auf die App und die App führt die Java$ open Client.app
und durch Doppelklick. Ihre Version mit Aufrufls | open -fe
funktioniert, aber wenn ich sie änderejava -jar app.jar
, wird mir dieser Fehler angezeigt.do shell script "cd " & quoted form of (POSIX path of current_path) & " ; " & quoted form of "java -jar app.jar"
Pfad zum Skript
In Ihrem AppleScript müssen Sie das aktuelle Arbeitsverzeichnis (cwd) ändern, bevor Sie den Java-Befehl ausgeben. Tun Sie dies mit einer AppleScript-Zeile wie:
Das
&&
ist wichtig. Wenn diescd
erfolgreich ist, wird derjava
Befehl im rechten cwd gestartet . Wenn diescd
fehlschlägt, wird derjava
Befehl nicht ausgeführt.Zu den Problemen, auf die Sie wahrscheinlich stoßen werden, gehören:
cd
; Benutzer haben seltsam benannte Ordner und Leerzeichen in ihren Pfaden.cd
kann scheitern; Packen Sie Ihr AppleScript in einen Try- Block, um einige Fehler abzufangen und den Benutzer zu warnen.Perl
Persönlich würde ich ein kurzes Perl-Skript anstelle eines Bash-Skripts verwenden.
Es gibt viel bessere Möglichkeiten, dieses Perl-Snippet zu schreiben, aber das sollte funktionieren.
Automator-Anwendung
Der beste Ansatz besteht darin, die Probleme mit Ihrem Automator-Ansatz zu lösen. In der Antwort von @ markhunte wird erläutert, wie der Pfad festgelegt und eine Anwendung erstellt wird . Dies sollte Sie den größten Teil des Weges bringen.
Siehe auch AppleScript-Pfad relativ zum Speicherort des Skripts .
appify - Erstellen Sie die einfachste Mac-App aus einem Shell-Skript
Alternativ können Sie das Appify-Skript von Thomas Aylott verwenden, um Ihr Shell-Skript in einer OS X-Anwendung zu bündeln. In Mathias Bynens Artikel erfahren Sie, wie Sie das Skript verwenden und einfache Mac-Apps aus Shell-Skripten erstellen .
Von der Community beigesteuerte Verbesserungen an diesem Skript sind verfügbar:
Codesignatur
Sobald Sie Ihr Anwendungspaket erstellt haben, sollte es mit einem Code signiert sein. Eine mit Code signierte App wird gestartet, ohne dass Ihre Clients Gatekeeper deaktivieren müssen.
Signieren Sie Ihre Anwendung mit Ihrer Apple Developer ID und dem folgenden
codesign
Befehl:Erfahren Sie mehr über die Codesignatur auf der Apple Developer Website.
quelle
Können Sie ändern ,
run.sh
umrun.command
den Benutzer zu doppelklicken Sie es und bekommen?quelle
cd ~
) des Benutzers ausgeführt , wodurch sie fehlschlug.Verwenden Sie Platypus : "Platypus ist ein OS X-Entwicklertool, das native Mac-Anwendungen aus interpretierten Skripten erstellt ..."
quelle
Hier ist meine Sicht auf das, was ich verstanden habe, was Sie erreichen wollen. Der Code ist absichtlich langwierig.
Sie müssen lediglich den Code in den Applescript-Editor kopieren, die gewünschten Änderungen vornehmen und ihn als Anwendung speichern.
Was den Dialog über die nicht unterstützte PowerPC-Anwendung betrifft, weiß ich nicht. Können Sie es über die Befehlszeile ausführen? Ich würde das überprüfen, um zu bestätigen, dass die App zuerst funktioniert.
quelle