Mon objectif est d'inclure dans un fichier zip ce qui équivaut à un raccourci, au lieu de dire à mes clients d'ouvrir Terminal et d'exécuter un script shell.
Mon déployable ressemble essentiellement à ceci:
$ unzip Deliverable.zip
$ cd Deliverable; ls
app.jar run.sh
Script dans run.sh
:
#!/bin/sh
java -jar app.jar
Il y a beaucoup plus dans le répertoire; il suffit de dire que j'ai besoin d'exécuter le script à partir du répertoire Livrable car j'ai besoin d'accéder aux chemins qui s'y rapportent. Cependant, je ne peux pas garantir où un client va ouvrir Deliverable.zip
(peut être le répertoire personnel, peut être directement dans le répertoire Téléchargements, etc.)
J'ai trouvé cela qui décrit comment créer un nouveau flux de travail dans Automator, puis l'enregistrer en tant qu'application pour lancer un script shell. J'ai essayé de faire ça pour envelopper run.sh
mais il dit qu'il ne peut pas trouver run.sh
.
Quelqu'un m'a suggéré d'utiliser applescript et m'a également envoyé un lien expliquant comment utiliser applescript pour basculer dans le répertoire courant; il y a une "action" AppleScript dans l'automate; J'ai donc créé un nouveau workflow avec cela et l'ai enregistré en tant qu'application. Voilà à quoi ça ressemble:
Le 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
Et voici l'erreur que j'obtiens lorsque je l'exécute:
Allez, ça devrait être assez simple. Qu'est-ce que je fais mal ici?
la source
Réponses:
Renommez votre fichier .sh en .command et vous pouvez cd dans le répertoire dans lequel se trouve le fichier .command avec ce qui suit au début du fichier:
la source
Je peux voir deux ou trois choses qui ne vont pas.
Tout d'abord, vous avez ouvert un workflow et non une application.
Vous devez choisir Application lorsque vous effectuez votre sélection pour le type de fichier Automator.
Et le code que vous avez ne fonctionnera pas comme prévu, puisque vous n'avez pas changé de répertoire. (CD).
Dans le code tel que vous l'avez, tout ce qu'il fait, c'est obtenir le chemin en tant qu'alias et le stocker dans la variable current_path et dans un format qui ne convient pas aux commandes unix.
Mais vous ne l'utilisez pas.
Le répertoire actuel sera donc probablement votre dossier personnel
À ce stade, on ne sait pas ce qu'il essaie de lancer.
Si je l'exécute comme vous l'avez, je reçois.
Ce qui est logique puisque je n'ai pas installé Java. Mais si je le faisais, je ne m'attendrais pas à ce qu'il trouve le bon fichier.
L'Applescript doit ressembler à ceci.
Dans mon exemple
Je passe au chemin POSIX de l'alias dans la variable current_path
c'est-à-dire de "alias" Macintosh HD: Applications: "" à "/ Applications /"
Le
quoted form of
s'échappe du chemin à l'aide de guillemets.J'ai utilisé la commande / bin / ls et l' ai dirigée vers l' ouverture dans TextEdit stdin comme démonstration ici afin que vous puissiez tester pour voir si vous arrivez dans la zone que vous attendez.
Vous utiliseriez quelque chose comme;
mettre à jour:
Une autre façon consiste simplement à utiliser Applescript pur.
la source
ls | open
code ouvre définitivement le répertoire que je veux, ce qui est génial. Mais lorsque j'appelle openClient.app
, j'obtiens:LSOpenURLsWithRole() failed with error -10665 for the file <path-to-Client.app>
- quelques recherches sur la signification de cette erreur suggèrent un problème d'autorisation, je vérifie et les+x
indicateurs sont définis. J'ai également essayé ceci , et cela n'a pas fonctionné (avec la même erreur).Client.app
partir du Finder (double-clic) entraîne également la même fenêtre contextuelle d'erreur PowerPC.I call open Client.app
Est-ce l'application Automator? D'après ce que je comprends dans le Automator vous avez le code AppleScript:do shell script "cd " & quoted form of (POSIX path of current_path) & " ;\"java -jar app.jar\""
. Alors, où utilisez-vous laopen
commande? pour autant que je sache ce que vous faites, vous n'avez pas besoin de l'utiliser. Les clients utiliseront un double-clic sur l'application et l'application exécutera java$ open Client.app
et en double-cliquant. Votre version avec invocationls | open -fe
fonctionne, mais quand je la change, celajava -jar app.jar
me donne cette erreur.do shell script "cd " & quoted form of (POSIX path of current_path) & " ; " & quoted form of "java -jar app.jar"
Chemin vers le script
Dans votre AppleScript, vous devez modifier le répertoire de travail actuel (cwd) avant d'émettre la commande java. Faites-le avec une ligne AppleScript comme:
C'est
&&
important. Si lecd
succès, lajava
commande sera lancée dans le cwd droit . En cas d'cd
échec, lajava
commande ne sera pas exécutée.Les problèmes que vous rencontrerez probablement incluent:
cd
; les utilisateurs auront des dossiers et des espaces aux noms étranges sur leur chemin.cd
peut échouer; envelopper votre AppleScript dans un bloc d' essai pour détecter certaines erreurs et avertir l'utilisateur.perl
Personnellement, je préfère utiliser un script perl court à la place d'un script bash.
Il existe de bien meilleures façons d'écrire cet extrait de code Perl, mais cela devrait fonctionner.
Application Automator
La meilleure approche consiste à résoudre les problèmes liés à votre approche Automator. La réponse de @ markhunte explique comment corriger le chemin d'accès et créer une application . Cela devrait vous aider la plupart du temps.
Voir également le chemin AppleScript relatif à l'emplacement du script .
appify - créez l'application Mac la plus simple possible à partir d'un script shell
Alternativement, vous pouvez utiliser le script appify de Thomas Aylott pour regrouper votre script shell dans une application OS X. L'article de Mathias Bynen explique comment utiliser le script, comment créer de simples applications Mac à partir de scripts shell .
Des améliorations apportées par la communauté à ce script sont disponibles:
Signature du code
Une fois que vous avez créé votre ensemble d'applications, il doit être signé par code. Une application signée par code se lancera sans que vos clients ne désactivent Gatekeeper.
Codez votre application à l'aide de votre identifiant de développeur Apple et de la
codesign
commande:En savoir plus sur la signature de code sur le site des développeurs Apple.
la source
Utilisez Platypus : "Platypus est un outil de développement OS X qui crée des applications Mac natives à partir de scripts interprétés ..."
la source
Pouvez - vous changer
run.sh
pourrun.command
et obtenir l'utilisateur double - cliquez dessus?la source
cd ~
), ce qui a provoqué son échec.Voici mon point de vue sur ce que j'ai compris que vous essayez d'accomplir. Le code est exprès depuis longtemps.
Il vous suffit de copier le code dans l'éditeur Applescript, d'apporter les modifications souhaitées et de l'enregistrer en tant qu'application.
Quant à la boîte de dialogue sur l'application PowerPC non prise en charge, je ne sais pas. Pouvez-vous l'exécuter à partir de la ligne de commande? Je vérifierais cela pour confirmer que l'application fonctionne en premier.
la source