Je souhaite lancer une application sur OSX à partir d'un script. J'ai besoin de lui transmettre des arguments de ligne de commande. Malheureusement, open
n'accepte pas les arguments de ligne de commande.
La seule option à laquelle je peux penser est d'utiliser nohup myApp > /dev/null &
pour lancer mon application afin qu'elle puisse exister indépendamment du script qui la lance.
De meilleures suggestions?
nohup &
résout le problème?Réponses:
Sous OS X 10.6, la
open
commande a été améliorée pour permettre le passage d'arguments à l'application:Mais pour les anciennes versions de Mac OS X, et comme les bundles d'applications ne sont pas conçus pour recevoir des arguments de ligne de commande, le mécanisme classique consiste à utiliser Apple Events pour des fichiers comme ici pour les applications Cocoa ou ici pour les applications Carbon. Vous pourriez aussi probablement faire quelque chose de kludgey en passant des paramètres en utilisant des variables d'environnement.
la source
open
sont - comme le dit la réponse - pas conçues pour fonctionner à partir de la ligne de commande. "Pourquoi?" Parce que c'est comme ça que Mac OS X est.Comme mentionné dans la question ici , la
open
commande dans 10.6 a maintenant unargs
drapeau, vous pouvez donc appeler:open -n ./AppName.app --args -AppCommandLineArg
la source
Un ensemble d'applications (un
.app
fichier) est en fait un ensemble de répertoires. Au lieu d'utiliseropen
et le.app
nom, vous pouvez réellement y accéder et démarrer le binaire réel. Par exemple:C'est le binaire réel qui pourrait accepter des arguments (ou non, dans
LittleSnapper
le cas de).la source
DYLD_LIBRARY_PATH
,DYLD_FRAMEWORK_PATH
.Dans le cas où votre application doit fonctionner sur des fichiers (ce que vous attendez normalement de passer comme:)
./myApp *.jpg
, vous le feriez comme ceci:la source
open something.py -a Eclipse.app
Je recommanderais la technique que propose MathieuK. Dans mon cas, j'avais besoin de l'essayer avec Chromium:
Je me rends compte que cela ne résout pas le problème du PO, mais j'espère que cela fera gagner du temps à quelqu'un d'autre. :)
la source
open
a également un indicateur -a, que vous pouvez utiliser pour ouvrir une application à partir du dossier Applications par son nom (ou par identifiant de bundle avec l'indicateur -b). Vous pouvez combiner cela avec l'option --args pour obtenir le résultat souhaité:Pour ouvrir une vidéo dans le lecteur VLC qui doit être mise à l'échelle avec un facteur 2x et en boucle, vous devez par exemple exécuter:
Notez que je n'ai pas pu obtenir la sortie des commandes vers le terminal. (même si je n'ai rien essayé pour résoudre ça)
la source
open -a
intentionnellement ?? En tout cas,open -a /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --args --user-data-dir=/Users/an/userll
ça ne marche pas pour moi.Je voulais que deux instances distinctes de Chrome soient exécutées, chacune utilisant son propre profil. Je voulais pouvoir les démarrer à partir de Spotlight , comme c'est mon habitude de démarrer des applications Mac. En d'autres termes, j'avais besoin de deux applications Mac régulières,
regChrome
pour la navigation normale etaltChrome
pour utiliser le profil spécial, pour être facilement démarré en tapant ⌘-espace pour afficher Spotlight, puis 'reg' ou 'alt', puis Entrée.Je suppose que le moyen par force brute d'atteindre l'objectif ci-dessus serait de faire deux copies du bundle d'applications Google Chrome sous les noms respectifs. Mais c'est moche et complique la mise à jour.
Je me suis retrouvé avec deux applications AppleScript contenant chacune deux commandes. Voici celui pour
altChrome
:La deuxième ligne commence Chrome avec le profil alternatif (le
--user-data-dir
paramètre).La première ligne est une tentative infructueuse de donner aux deux applications des icônes distinctes. Au départ, cela semble fonctionner correctement. Cependant, tôt ou tard, Chrome relit son fichier d'icône et obtient celui correspondant à la dernière des deux applications qui a été démarrée en dernier, ce qui entraîne deux applications en cours d'exécution avec la même icône. Mais je n'ai pas pris la peine d'essayer de le réparer - je garde les deux navigateurs sur des bureaux séparés et la navigation entre eux n'a pas posé de problème.
la source
À partir d' OS X Yosemite , nous pouvons désormais utiliser AppleScript et Automator pour automatiser des tâches complexes. JavaScript pour l'automatisation peut désormais être utilisé comme langage de script.
Cette page donne un bon exemple de script qui peut être écrit sur la ligne de commande en utilisant le mode interactif bash et osascript . Il ouvre un onglet Safari et accède à
http://developer.telerik.com/featured/javascript-os-x-automation-example/example.com
.la source
Avec applescript:
la source
Pourquoi ne pas simplement définir ajouter un chemin vers la corbeille de l'application. Pour MacVim, j'ai fait ce qui suit.
Un alias, est une autre option que j'ai essayée.
Avec le PATH d'exportation, je peux appeler toutes les commandes de l'application. Les arguments ont bien passé pour mon test avec MacVim. Alors que l'alias, je devais alias chaque commande dans le bac.
Profitez de la puissance d'alias et de PATH. Cependant, vous devez surveiller les modifications lors de la mise à niveau du système d'exploitation.
la source
Simple, remplacez ici "APP" par le nom de l'application que vous souhaitez lancer.
Merci plus tard.
la source
Vous pouvez lancer des applications en utilisant
open
:Cela devrait ouvrir l'application souhaitée.
la source