Gibt es eine einfache Möglichkeit, Befehlszeilenargumente an eine Anwendung auf einem Mac anzuhängen? Um beispielsweise Opera im Kiosk-Modus auszuführen oder ein anderes Profil in Firefox zu verwenden, kann ich Folgendes eingeben
$ /Applications/Opera.app/Contents/MacOS/Opera -kioskmode
$ /Applications/Firefox.app/Contents/MacOS/firefox -P profilename -no-remote
In Windows kann ich die Argumente an die Verknüpfungseigenschaften anhängen, aber da Macs die Verknüpfung nicht per se verwenden und die Anwendungen direkt ausführen, ist dies nicht möglich.
Ich habe festgestellt, dass das Starten der Anwendungen über Bash oder Applescript teilweise funktioniert:
# 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"
Ich kann diese ausführbar machen und ein Symbol zuweisen, und alles funktioniert einwandfrei, außer dass beim Ausführen eines dieser Pseudoprogramme entweder ein Terminalfenster oder ein Applescript-Symbol geöffnet bleibt, solange die Anwendung geöffnet ist. Vermutlich würde die Verwendung des Applescript-Befehls open
dies vermeiden, aber da ich die Anwendung nicht so ausführe , wie sie (nur /Applications/Firefox
) gepackt ist , funktioniert sie nicht.
Gibt es eine bessere Möglichkeit, Anwendungen mit Befehlszeilenargumenten auszuführen? Wenn nicht, gibt es eine Möglichkeit, zu verhindern, dass eine permanente Terminalsitzung oder ein Applescript-Symbol geöffnet bleibt, während die Anwendung geöffnet ist?
Bearbeiten
Laut einer Mozilla-Wiki-Seite ist es am besten, ein Skript zu verwenden, um die Anwendung mit Argumenten auszuführen. Durch Hinzufügen &
von am Ende des Skripts wird das beständige Terminalfenster beendet. Das einzige Ärgernis ist jetzt, dass es ein totes, abgemeldetes Terminalfenster öffnet (das ist besser als das beständige, aber immer noch ...)
#!/bin/sh
/Applications/Firefox.app/Contents/MacOS/firefox -P default -no-remote &
quelle
&
, der noch zum Terminal gehört, können Sie dies beheben, indem Sie die Zeiledisown %/Applications/Firefox.app/Contents/MacOS/firefox
nach dem Ausführen hinzufügen. Anschließend können Sie das Terminal mithilfe von AppleScript sicher schließen.Antworten:
Hier ist meine beste Lösung: Erstellen Sie ein Applescript mit:
Und speichern Sie es als Anwendung .
Sie können jede Anwendung mit beliebigen Argumenten in den ersten Teil setzen. Der Teil nach dem
&
muss töten, was auch immer Sie Ihr Skript + .app genannt haben. Sie werden sehen, dass die Skript-App im Dock aufleuchtet, aber dann verschwindet sie.Hinweis: Das Skript funktioniert nicht ordnungsgemäß, wenn es im Skript-Editor ausgeführt wird, sondern nur, wenn es in der von Ihnen erstellten Skriptanwendung ausgeführt wird.
quelle
Ab OS X 10.6.2 kann der Befehl open Argumente über das Flag --args an die Anwendung übergeben, die er öffnet. Ein AppleScript sieht so aus:
Das sollte dir das Verhalten geben, das du willst.
quelle
--args
mit Chrome versucht und es funktioniert nicht. Es wird nur für die erste Instanz funktionieren . Wenn Sie versuchen, zwei--user-data-dir
gleichzeitig auszuführen , können Sie dies nicht tun,open
sondern müssen es nach der alten/applications...
Methode ausführen . Weiß jemand, warum zum Teufel--args
nicht funktioniert?Öffnen Sie Automator und erstellen Sie eine Anwendung mit einer einzigen Aktion " Shell-Skript ausführen":
Diese Anwendung startet Firefox und wird sofort beendet, wobei nur Firefox ausgeführt wird.
Alternativ können Sie eine Anwendung mit AppleScript Editor mit dem folgenden AppleScript-Code erstellen:
Beide funktionieren einwandfrei und lassen weder Terminal noch eine Skriptanwendung länger als eine Sekunde laufen. Mit Automator können Sie sogar einen Service erstellen, wenn Sie dies wünschen.
quelle
open --args
in 10.6.2 implementiert wurde, wie Bob bereits erwähnte.open eclipse.app -n
um einen zweiten Eclipse-Arbeitsbereich zu öffnen. Sehr praktisch. Vielen Dank!Dies ist eine alte Diskussion, aber sie taucht immer noch bei Google-Suchen auf. Ich dachte, ich würde ein paar ¢ hinzufügen.
Es ist wahrscheinlich besser, einen "Bundle-Bezeichner" zu verwenden, als einen absoluten Pfad zur ausführbaren Datei:
Oder in einem Apple Script:
Was ich noch nicht herausgefunden habe, ist, wie man eine neue Instanz / ein neues Fenster mit einem anderen Profil öffnet, sobald die erste bereits geöffnet ist. (Wenn ich das AppleScript oben ausführe, dann ein anderes mit "Profil 2", dann öffnet Chrome einfach noch ein weiteres Fenster als "Profil 1"). :(
quelle
In diesem Szenario ist es nicht erforderlich (wie in einigen anderen Antworten vorgeschlagen), killall (oder eine ähnliche Methode ) zu verwenden, um den übergeordneten AppleScript-Anwendungsprozess ("Applet") zu beenden. Es kann sogar unerwünschte Nebenwirkungen haben, wenn der Name / das Muster, das killall gegeben wird, mehr als nur dem übergeordneten Applet-Prozess entspricht (z. B. andere, gleichzeitig ausgeführte AppleScript-Anwendungen (wenn „Applet“ als Muster verwendet wird)).
So etwas ist
kill $PPID
vielleicht vernünftiger, aber wir möchten vielleicht nicht davon ausgehen, dass das Applet einer AppleScript-Anwendung immer das unmittelbare übergeordnete Element der Shell ist, die von do-Shell-Skript gestartet wird . Zum Glück gibt es eine vernünftige Möglichkeit, das zu tun, was Sie brauchen.Per TN2065 (unter „Ich möchte einen Hintergrund - Server starten,? Wie mache ich Shell - Skript machen nicht bis der Befehl ausgeführt warten“), ist die richtige Methode stdout und stderr zu umleiten und die Shell das Programm im Hintergrund laufen haben .
Verwenden Sie den Skript-Editor , um das folgende Programm als AppleScript-Anwendung zu speichern:
(Funktionale Zeilenumbrüche wurden hinzugefügt, um es "schmal" zu halten; löschen Sie das
¬
und\\
und setzen Sie alles auf eine lange Zeile, wenn Sie möchten)Es wird lange genug ausgeführt, um Firefox zu starten, und wird ordnungsgemäß beendet, während Firefox weiterhin ausgeführt wird.
Die Umleitung ist erforderlich, da das Shell-Skript nicht nur darauf wartet, dass sein unmittelbares untergeordnetes Element (die Shell) beendet wird, sondern auch darauf, dass (alle Instanzen von) den beschreibbaren Enden der Pipes, die es erstellt, stdout und stderr der Shell geschlossen werden . Die Pipes stdout und stderr der Shell ( do shell script ) werden von den Programmen geerbt, die sie ohne Umleitung ausführen (auch solche, die im Hintergrund mit ausgeführt werden
&
). Durch die Umleitung wird sichergestellt, dass die Hülle als letzte die beschreibbaren Enden der Pipes hält. Aus diesem Grund wird do-Shell-Skript unmittelbar nach dem Beenden der Shell zurückgegeben, sodass die AppleScript-Anwendung selbst beendet werden kann (da das do-Shell-Skript der letzte Ausdruck im AppleScript-Programm ist).Die anderen Antworten, die open inside verwenden, funktionieren mit Shell-Skripten , da open (eigentlich LaunchServices) die gleiche Arbeit leistet wie das Hintergrundprogramm und das Senden von stdout und stderr an einen anderen Ort.
quelle
open --args
sauberer aussieht. Gibt es einen Nachteil bei der Verwendung eines von ihnen?open --args
AppleScript
Zwei Punkte dort.
Es funktioniert jedoch gut auf 10.6.5
quelle
applet
bezieht sich auf?Im Folgenden sollten Sie Befehlszeilenargumente für die .app selbst angeben können:
Klicken Sie mit der rechten Maustaste auf das .app-Bundle, wählen Sie "Show Package Contents" (Paketinhalt anzeigen), navigieren Sie zu Info.plist, doppelklicken Sie darauf, suchen Sie den Args-Schlüssel und bearbeiten Sie ihn.
Ich habe momentan keine OS X-Maschine zur Hand, daher kann ich nicht prüfen, ob Sie dies auch für einen Alias tun können (wenn Sie die ursprüngliche .app-Datei ohne Argumente usw. beibehalten möchten).
quelle
Packen Sie Ihre Anwendung in einen AppleScript-Launcher.
Hier sind die Schritte.
Erstellen Sie ein AppleScript mit dem folgenden Inhalt und speichern Sie es als Anwendung (in diesem Beispiel heißt es "Firefox 3 launcher.app").
Gehen Sie zu dieser App im Finder, klicken Sie mit der rechten Maustaste darauf und zeigen Sie den Paketinhalt an.
Platzieren Sie Ihre Anwendung im Stammverzeichnis des Paketinhalts. (In diesem Beispiel wäre es "Firefox 3.app")
Ergebnis: / Programme / Firefox 3 launcher.app/Firefox 3.app
Sie können jetzt Ihren Anwendungsstarter öffnen.
Anmerkungen:
quelle
Warum benutzt du nicht:
Einfach, aber es funktioniert.
quelle
Der
open
Befehl verfügt über ein optionales--args
Argument, dessen Wert als Argumente an die geöffnete Anwendung übergeben wird. Zum Beispiel:quelle