Existe-t-il un moyen simple d’ajouter des arguments de ligne de commande à une application sur un Mac? Par exemple, pour exécuter Opera en mode kiosk ou pour utiliser un profil différent dans Firefox, je peux saisir
$ /Applications/Opera.app/Contents/MacOS/Opera -kioskmode
$ /Applications/Firefox.app/Contents/MacOS/firefox -P profilename -no-remote
Sous Windows, je peux ajouter les arguments aux propriétés du raccourci, mais comme les Mac n’utilisent pas de raccourci en tant que tel et n’exécutent pas les applications directement, cela n’est pas possible.
J'ai constaté que le lancement des applications via bash ou Applescript fonctionnait partiellement:
# Bash
#!/bin/sh
/Applications/Firefox.app/Contents/MacOS/firefox -P default -no-remote
# Applescript
do shell script "exec /Applications/Opera.app/Contents/MacOS/Opera -kioskmode"
Je peux créer ces exécutables et assigner une icône. Tout fonctionne parfaitement, sauf que lorsque je lance l'un de ces pseudo programmes, une fenêtre de terminal ou une icône Applescript reste ouverte tant que l'application est ouverte. Vraisemblablement, utiliser la commande Applescript open
éviterait cela, mais comme je n'exécute pas l'application telle qu'elle est empaquetée (juste /Applications/Firefox
), cela ne fonctionne pas.
Alors, y a-t-il un meilleur moyen d’exécuter des applications avec des arguments de ligne de commande? Sinon, y a-t-il un moyen d'empêcher une session de terminal persistant ou une icône Applescript de rester ouverte pendant que l'application est ouverte?
Modifier
Selon une page Wiki de Mozilla , il est préférable d’utiliser un script pour exécuter l’application avec des arguments. Ajouter un &
à la fin du script supprime la fenêtre de terminal persistante. Le seul inconvénient, c’est qu’il ouvre une fenêtre de terminal morte et déconnectée (meilleure que celle persistante, mais quand même ...)
#!/bin/sh
/Applications/Firefox.app/Contents/MacOS/firefox -P default -no-remote &
la source
&
qui appartient toujours au terminal, vous pouvez résoudre ce problème en ajoutant la lignedisown %/Applications/Firefox.app/Contents/MacOS/firefox
après l'avoir exécuté, puis vous pouvez fermer le terminal en toute sécurité à l'aide d'AppleScript.Réponses:
Voici ma meilleure solution: Créer un AppleScript avec:
Et enregistrez-le en tant qu'application .
Vous pouvez mettre n'importe quelle application avec n'importe quel argument dans la première partie. La partie après le
&
besoin de tuer tout ce que vous avez nommé votre script + .app. L’application de script s’affiche dans le Dock, mais elle disparaîtra.Remarque: le script ne fonctionnera pas correctement s'il est exécuté à partir de l'éditeur de script, mais uniquement à partir de l'application de script créée.
la source
À partir de OS X 10.6.2, la commande open peut transmettre des arguments à l'application qu'elle ouvre via l'indicateur --args. Un AppleScript à utiliser ressemble à ceci:
Cela devrait vous donner tout le comportement que vous voulez.
la source
--args
avec Chrome et ça ne marche pas. Cela ne fonctionnera que pour la première instance . Si vous essayez d'exécuter deux--user-data-dir
logiciels simultanément, vous ne pouvez pas le faire,open
mais vous devez l'exécuter avec l'ancienne/applications...
méthode. Quelqu'un sait pourquoi la baise ne--args
fonctionne pas?Ouvrez Automator et créez une application avec une seule action Exécuter un script shell :
Cette application lance Firefox et se ferme instantanément, ne laissant que Firefox en cours d'exécution.
Vous pouvez également créer une application à l'aide de l' éditeur AppleScript avec le code AppleScript suivant:
Les deux fonctionnent correctement et ne gardent ni Terminal ni une application de script en cours d'exécution pendant plus d'une seconde environ. En utilisant Automator, vous pouvez même créer un service si vous le souhaitez.
la source
open --args
10.6.2 a été implémentée, comme Bob l’a déjà mentionné.open eclipse.app -n
ouvrir un deuxième espace de travail Eclipse. Très utile. Merci!Ceci est une vieille discussion, mais revient toujours sur les recherches sur Google, alors j'ai pensé ajouter quelques ¢.
Il est probablement préférable d'utiliser un "identifiant de paquet" plutôt qu'un chemin absolu vers l'exécutable:
Ou dans un script Apple:
Ce que je n'ai pas encore compris, c'est comment ouvrir une nouvelle instance / fenêtre avec un profil différent une fois que le premier est déjà ouvert. (Si je lance le script AppleScript ci-dessus, puis un autre avec "Profil 2", alors Chrome ouvrira toujours une autre fenêtre sous le nom "Profil 1"). :(
la source
Comme il a été suggéré dans d'autres réponses, il n'est pas nécessaire d'utiliser killall (ou similaire) pour tuer le processus d'application AppleScript parent ("applet") dans ce scénario. Il peut même avoir des effets secondaires indésirables si le nom / modèle donné à killall ne correspond pas uniquement au processus d'applet parent (par exemple, d'autres applications AppleScript exécutant simultanément des applications AppleScript (si vous utilisez «applet» comme modèle)).
Quelque chose de semblable
kill $PPID
pourrait être plus raisonnable, mais nous ne voulons peut-être pas supposer que l'applet d'une application AppleScript est toujours le parent immédiat du shell démarré par do script shell . Heureusement, il existe un moyen parfaitement raisonnable de faire ce dont vous avez besoin.Conformément à TN2065 (sous «Je souhaite démarrer un processus de serveur d'arrière-plan; comment puis-je faire en sorte que le script shell n'attende pas la fin de la commande?»), La méthode appropriée consiste à rediriger stdout et stderr et à laisser le shell exécuter le programme en arrière-plan. .
Utilisez l' éditeur de script pour enregistrer le programme suivant en tant qu'application AppleScript:
(sauts de ligne fonctionnelle ajoutée pour le garder « réduire », supprimer le
¬
et\\
et le mettre sur une seule ligne de temps si vous le souhaitez)Il fonctionnera suffisamment longtemps pour démarrer Firefox et se fermera proprement pendant que Firefox continue de fonctionner.
La redirection est obligatoire car non seulement le script shell attend la fin de son enfant immédiat (le shell), mais il attend également (toutes les instances de) les extrémités inscriptibles des tuyaux qu'il crée pour que stdout et stderr du shell soient fermés. . Les commandes stdout et stderr du shell (les tubes du script shell ) sont héritées par les programmes qu’il exécute sans redirection (même ceux exécutés en arrière-plan
&
); la redirection garantit que le shell est le dernier à contenir les extrémités inscriptibles des tuyaux. Ainsi, le script shell retourne immédiatement après la fermeture du shell, ce qui permet à l'application AppleScript de se fermer (car le script shell est la dernière expression du programme AppleScript).Les autres réponses qui utilisent open à l' intérieur du script shell fonctionnent car open (en réalité, LaunchServices) effectue un travail équivalent en mettant en arrière-plan le programme résultant et en envoyant ses commandes stdout et stderr ailleurs.
la source
open --args
apparence est plus propre. y a-t-il des inconvénients à en utiliser?open --args
c'est probablement bien.AppleScript
Deux points là.
Cependant cela fonctionne bien sur 10.6.5
la source
applet
fait référence à?Ce qui suit devrait vous permettre de spécifier des arguments de ligne de commande pour le .app lui-même:
Cliquez avec le bouton droit sur .app bundle, sélectionnez "Afficher le contenu du paquet", accédez à Info.plist, double-cliquez dessus, recherchez la clé Args, puis modifiez-la.
Je n'ai pas de machine OS X à portée de main pour le moment, donc je ne peux pas vérifier si vous pouvez également le faire avec un alias (si vous vouliez conserver le fichier .app original sans argument, etc.).
la source
Enveloppez votre application dans un lanceur AppleScript.
Voici les étapes.
Créez un AppleScript avec le contenu suivant et enregistrez-le en tant qu'application (dans cet exemple, il s'appelle "Firefox 3 launcher.app").
Arrivé à cette application dans le Finder, faites un clic droit dessus, affichez le contenu du paquet.
Placez votre application à la racine du contenu du package. (Dans cet exemple, il s'agirait de "Firefox 3.app")
Résultat: / Applications / Firefox 3 launcher.app/Firefox 3.app
Vous pouvez maintenant ouvrir votre lanceur d'applications.
Remarques:
la source
Pourquoi n'utilisez-vous pas:
Simple mais ça marche.
la source
La
open
commande a un--args
argument optionnel qui valeur sera transmis à l'application ouverte en tant qu'arguments. Par exemple:la source