Ich möchte eine App unter OSX über ein Skript starten. Ich muss es Befehlszeilenargumente übergeben. open
Akzeptiert leider keine Befehlszeilenargumente.
Die einzige Option, die mir in den Sinn kommt, ist nohup myApp > /dev/null &
das Starten meiner App, damit sie unabhängig von dem Skript existiert , mit dem sie gestartet wird.
Irgendwelche besseren Vorschläge?
nohup &
man das Problem?Antworten:
In OS X 10.6 wurde der
open
Befehl erweitert, um die Übergabe von Argumenten an die Anwendung zu ermöglichen:Für ältere Versionen von Mac OS X und da App-Bundles nicht für die Übergabe von Befehlszeilenargumenten ausgelegt sind, besteht der herkömmliche Mechanismus darin, Apple Events für Dateien wie hier für Cocoa-Apps oder hier für Carbon-Apps zu verwenden. Sie könnten wahrscheinlich auch etwas Kludgey tun, indem Sie Parameter bei der Verwendung von Umgebungsvariablen übergeben.
quelle
open
sind jedoch - wie in der Antwort angegeben - nicht für die Arbeit über die Befehlszeile ausgelegt. "Warum?" Denn so ist Mac OS X.Wie in der Frage hier erwähnt , hat der
open
Befehl in 10.6 jetzt einargs
Flag, sodass Sie Folgendes aufrufen können:open -n ./AppName.app --args -AppCommandLineArg
quelle
Ein Anwendungspaket (eine
.app
Datei) besteht aus mehreren Verzeichnissen. Anstattopen
und den.app
Namen zu verwenden, können Sie tatsächlich darauf zugreifen und die eigentliche Binärdatei starten. Zum Beispiel:Dies ist die eigentliche Binärdatei, die möglicherweise Argumente akzeptiert (oder auch nicht
LittleSnapper
).quelle
DYLD_LIBRARY_PATH
,DYLD_FRAMEWORK_PATH
.Wenn Ihre App an Dateien arbeiten muss (was Sie normalerweise als :) erwarten
./myApp *.jpg
würden, gehen Sie folgendermaßen vor:quelle
open something.py -a Eclipse.app
Ich würde die Technik empfehlen, die MathieuK anbietet. In meinem Fall musste ich es mit Chromium versuchen:
Mir ist klar, dass dies das Problem des OP nicht löst, aber hoffentlich die Zeit eines anderen spart. :) :)
quelle
open
hat auch ein -a-Flag, mit dem Sie eine App aus dem Ordner "Programme" anhand ihres Namens (oder anhand der Bundle-ID mit dem Flag -b) öffnen können. Sie können dies mit der Option --args kombinieren, um das gewünschte Ergebnis zu erzielen:Um ein Video im VLC-Player zu öffnen, das mit einem Faktor 2x und einer Schleife skaliert werden soll, führen Sie beispielsweise Folgendes aus:
Beachten Sie, dass ich die Ausgabe der Befehle nicht an das Terminal senden konnte. (obwohl ich nichts versucht habe, um das zu lösen)
quelle
open -a
absichtlich wiederholt ? Auf jeden Fallopen -a /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --args --user-data-dir=/Users/an/userll
funktioniert das bei mir nicht.Ich wollte zwei separate Instanzen von Chrome ausführen, die jeweils ein eigenes Profil verwenden. Ich wollte sie von Spotlight aus starten können , wie es meine Gewohnheit ist, Mac-Apps zu starten . Mit anderen Worten, ich brauchte zwei normale Mac-Anwendungen,
regChrome
um normal zu surfen undaltChrome
das spezielle Profil zu verwenden, um einfach durch Drücken von ⌘-Leertaste zum Aufrufen von Spotlight, dann 'reg' oder 'alt' und dann Enter zu starten.Ich nehme an, der Brute-Force-Weg, um das oben genannte Ziel zu erreichen, besteht darin, zwei Kopien des Google Chrome-Anwendungspakets unter den jeweiligen Namen zu erstellen. Aber das ist hässlich und erschwert die Aktualisierung.
Am Ende hatte ich zwei AppleScript- Anwendungen mit jeweils zwei Befehlen. Hier ist der für
altChrome
:In der zweiten Zeile wird Chrome mit dem alternativen Profil (dem
--user-data-dir
Parameter) gestartet.Die erste Zeile ist ein erfolgloser Versuch, den beiden Anwendungen unterschiedliche Symbole zuzuweisen. Zunächst scheint es gut zu funktionieren. Früher oder später liest Chrome jedoch seine Symboldatei erneut und ruft diejenige ab, die der zuletzt gestarteten der beiden Apps entspricht. Dies führt dazu, dass zwei Anwendungen mit demselben Symbol ausgeführt werden. Aber ich habe mich nicht darum gekümmert, das Problem zu beheben. Ich behalte die beiden Browser auf separaten Desktops, und das Navigieren zwischen ihnen war kein Problem.
quelle
Beginnend mit OS X Yosemite können wir jetzt AppleScript und Automator verwenden, um komplexe Aufgaben zu automatisieren. JavaScript für die Automatisierung kann jetzt als Skriptsprache verwendet werden.
Diese Seite enthält ein gutes Beispielskript , das im interaktiven Bash- und Osascript- Modus über die Befehlszeile geschrieben werden kann . Es öffnet eine Safari-Registerkarte und navigiert zu
http://developer.telerik.com/featured/javascript-os-x-automation-example/example.com
.quelle
Mit Applescript:
quelle
Warum nicht einfach den Pfad zum Bin der App hinzufügen? Für MacVim habe ich Folgendes getan.
Ein Alias ist eine weitere Option, die ich ausprobiert habe.
Mit dem Exportpfad kann ich alle Befehle in der App aufrufen. Die Argumente für meinen Test mit MacVim haben sich gut bewährt. Während der Alias, musste ich jeden Befehl in der Bin alias.
Genieße die Kraft von Alias und PATH. Sie müssen jedoch Änderungen überwachen, wenn das Betriebssystem aktualisiert wird.
quelle
Einfach, hier ersetzen Sie die "APP" durch den Namen der App, die Sie starten möchten.
Danke mir später.
quelle
Sie können Apps starten mit
open
:Dies sollte die gewünschte Anwendung öffnen.
quelle