Wie übergebe ich Befehlszeilenargumente an Dock-Elemente?


Antworten:


96

Sie haben grundsätzlich zwei Möglichkeiten:

Option 1 : Verwenden Sie Automator, um eine Anwendung zu erstellen, die Chrome mit Befehlszeilenargumenten startet.

Starten Sie Automator und wählen Sie, um eine Anwendung zu erstellen . Doppelklicken Sie im Ordner Library / Utilities auf Run Shell Script, und ersetzen Sie den Textinhalt - - durch Folgendes:cat

open -a "Google Chrome.app" --args -pinned-tab-count=4
# keep the .app suffix or will break with Parallels

Speichern Sie, wo immer Sie möchten.

Um diese Anwendung das Symbol zu ersetzen, Get Info auf Ihrem realen Google Chrome, klicken Sie auf das Symbol oben links drücken Cmd-C, Get Info auf Ihrem Chrome Automator App, klicken Sie auf das Symbol, und drücken Sie Cmd-V.

Da es sich um eine andere Anwendung handelt, werden im Dock zwei Chrome-Anwendungen angezeigt, wenn sie ausgeführt werden: Chrome und Ihr Chrome-Launcher.


Option 2 : Bearbeiten Sie Ihr Anwendungspaket, um stattdessen ein Skript zu starten. Dieses Skript startet die eigentliche Anwendung und fügt das Befehlszeilenargument hinzu.

Klicken Sie mit der rechten Maustaste Google Chrome.appund wählen Sie Paketinhalt anzeigen . Zum Contents/und öffnen Info.plistin Property List Editor / Xcode (Apples Entwickler - Tools) oder einem Dritten plistEditor.

Suchen Sie nach dem Eintrag CFBundleExecutableoder Executable File. Merke dir seinen Wert (zB firefox-binfür Firefox). Ersetzen Sie es durch parameterized-app.sh.

Öffnen Sie das Terminal und geben Sie Folgendes ein:

touch /Applications/Firefox.app/Contents/MacOS/parameterized-app.sh
open /Applications/Firefox.app/Contents/MacOS/parameterized-app.sh

Ein Editor für die .shDatei wird geöffnet. Stellen Sie den Inhalt der Datei auf:

#!/usr/bin/env bash
exec /Applications/Firefox.app/Contents/MacOS/firefox-bin -ProfileManager

(Verwenden Sie den Namen der tatsächlichen ausführbaren Datei, von der Sie sie entfernt haben Info.plist, und fügen Sie die gewünschten Befehlszeilenargumente hinzu.)

Speichern und schließen. Geben Sie im Terminal Folgendes ein:

chmod +x /Applications/Firefox.app/Contents/MacOS/parameterized-app.sh

Schließen Sie jetzt Terminal und verschieben Sie Ihre Anwendung (die jetzt nicht ausgeführt werden muss) in einen anderen Ordner und wieder zurück. Dadurch werden die Launch Services aktualisiert , andernfalls werden Ihre Änderungen ignoriert und irritieren Sie ungemein.

Wenn Sie jetzt Ihre Anwendung öffnen, wird die .shDatei tatsächlich ausgeführt , wodurch die eigentliche ausführbare Datei gestartet und die Befehlszeilenargumente gesendet werden.

Es wird so aussehen und sich so verhalten, wie Sie es erwarten, aber Sie müssen dies jedes Mal wiederholen, wenn Sie Ihre Anwendung aktualisieren, da dies im Allgemeinen das Anwendungspaket und alle von Ihnen vorgenommenen Änderungen ersetzt.


Aus irgendeinem Grund ignoriert mein Chrome 10 das Befehlszeilenargument und ordnet die Registerkarten, die in der vorherigen Sitzung angeheftet wurden, automatisch an. Ich weiß nicht, was hier falsch ist, da ich kein Chrome-Nutzer bin und nicht weiß, wie es sich verhalten soll.
Daniel Beck

6
"Bewegen Sie Ihre Bewerbung in einen anderen Ordner und wieder zurück" sollte fett gedruckt sein - beim ersten Lesen komplett übersehen :)
stephanos

1
Gibt es eine Möglichkeit, Launch Services über einen Shell-Befehl zu aktualisieren, zurückzusetzen oder neu zu starten, damit Sie die Anwendung nicht hin- und herbewegen müssen? dh damit dieser schritt leicht skriptfähig ist?
Jordan Brough

1
@Jordan Brough Sie können das Dienstprogramm lsregister verwenden, um ein LaunchServices-Update zu erzwingen:/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f /Applications/Hello\ World.app
Will Ross,

1
Natürlich funktioniert Option 2 nur bei Nicht-CodeSign-Apps. Wenn es von Apple oder dem App Store stammt, ist es gegen Änderungen signiert. Sogar eine Änderung an Info.plist wird es stoppen. In diesem Fall würde eine einfache Stub / Wrapper-App helfen.
2.

10

Sie könnten ein Skript schreiben, mit dem Chrome gestartet wird, das jedoch nicht das Anwendungssymbol im Dock ist. Dadurch würde ein separates Chrome-Symbol angezeigt. Sie müssen also ein Anwendungspaket erstellen.

Erstellen Sie zunächst eine Kopie Ihrer Chrome-App. Dann gibt es zwei Ansätze, die funktionieren könnten; Ich bin mir nicht sicher, welches mit Mac OS X und / oder dem Selbst-Update von Chrome besser funktioniert.

  1. Erstellen Sie einen "Launcher", der Chrome nur mit den Argumenten aufruft.

    • Öffnen Sie das App-Paket (klicken Sie mit der rechten Maustaste auf → Paketinhalt im Finder anzeigen) und werfen Sie alles außer Info.plist, PkgInfo und MacOS weg.
    • Löschen Sie im MacOS-Ordner die ausführbare Datei "Google Chrome" und ersetzen Sie sie durch ein Shell-Skript, das das echte Chrome aufruft:

      #!/bin/sh
      exec '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' -pinned-tab-count=4
      

      Vergiss chmod +xdas Drehbuch nicht.
       

  2. Ändern Sie das Chrome-Paket, das Sie tatsächlich ausführen.

    • Benennen Sie im MacOS-Ordner "Google Chrome" um und schreiben Sie ein Shell-Skript, das die reale Sache mit den zusätzlichen Argumenten aufruft:

      #!/bin/sh
      exec '/Applications/My Modified Google Chrome.app/Contents/MacOS/Google Chrome-real' -pinned-tab-count=4
      
    • Ich sehe, dass das Chrome-Paket etwas über Codesignaturen hat. Möglicherweise müssen Sie das CodeResourcesund / oder löschen _CodeSignature, damit es mit diesen Änderungen ausgeführt wird.

Dies alles basiert auf meinem Verständnis der Mac-App-Pakete. Ich habe diese Änderungen nicht speziell auf Chrome getestet. Es ist sogar möglich, dass die ausführbare Chrome-Datei auf dem Mac diese Option nicht unterstützt, da Mac-Anwendungen im Allgemeinen nicht mit steuerbaren Befehlszeilenoptionen ausgeführt werden sollen (im Gegensatz zu Windows, wo Anwendungen normalerweise über Verknüpfungen gestartet werden, die dies können) eingebettete Optionen haben).


Chrome-Support-Parameter, ich habe meine nur gemäß Ihrer Anweisung 2 automatisiert. Sie müssen in der Tat den vollständigen Pfad für die Binärdatei angeben und chmod 755 Google\ Chrome(Ihr Skript) nicht vergessen, nachdem Sie fertig sind. Ich habe mein Skript "launch.sh" genannt und es mit "Google \ Chrome" verknüpft, um Updates zu vereinfachen.
Orwellophile

Beachten Sie, dass das Ändern des Paketinhalts Probleme mit der Codesignatur
drevicko
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.