Ich arbeite ziemlich viel in der Kommandozeile und finde mich dabei, viele Aliase der Form zu definieren:
alias skim='/Applications/Skim.app/Contents/MacOS/Skim'
Gibt es eine Möglichkeit, Magie so hinzuzufügen, dass die Abfrage der ausführbaren Datei "foo" automatisch die ausführbare Datei /Applications/Foo.app/Contents/MacOS/Foo verwendet? Dies ist unter OS X 10.6.
(Mir ist bewusst, dass dies möglich ist open foo.pdf
, aber Skim ist nicht der Standard-PDF-Reader. Ich hätte gerne eine allgemeine Lösung. In einigen Fällen ist es nicht angebracht, die betreffende Anwendung als Standard-Handler für die Datei festzulegen.)
open -a Skim foo.pdf
.Antworten:
Endlich habe ich es verstanden: Fügen Sie dies zu Ihren hinzu
.bash_profile
Nun die folgende Arbeit:
Edit von Reid:
Ich habe das oben genannte als Python-Skript implementiert, das Wrapper-Skripte anstelle von Aliasen erstellt. Sie müssen
~/bin/mankoffmagic
Ihren Weg einschlagen. Wenn Sie möchten, dass die Wrapper automatisch aktualisiert werden, führen Sie sie regelmäßig von cron oder einem ähnlichen Computer aus.quelle
ls
Befehl hinzufügen. Dies funktioniert auch dort.Sie brauchen nichts Besonderes, Sie haben bereits die Antwort. Versuchen:
open /Applications/Foo.app bar.pdf
auf bearbeiten
Angesichts der folgenden Kommentare denke ich, dass meine Antwort immer noch relativ ähnlich wäre ... Ich würde eine Funktion erstellen, die open überschreibt, pushd to ausführt, callt
/Applications
,/usr/bin/open $appName.app $args
popd ausführt und zurückkehrt.Ich mag Shell-Skripte, aber so etwas wie das Folgende, das spezielle Fälle abdeckt und Sie so ziemlich die gleiche Syntax wie Apple verwendet, die für Open vorgesehen ist. Ich möchte meine Umwelt so sauber wie möglich halten.
Ich bin mir sicher, dass die Syntax aus dem Weltraum stammt:
bei der zweiten Bearbeitung
Wenn Sie sich @mankoffs Kommentar zur ursprünglichen Frage ansehen, wären die meisten Dinge in der obigen Funktion wahrscheinlich Zeitverschwendung, da Sie sie nur verwenden könnten
open -a $appName
. Also hat mankoff wahrscheinlich die einfachste Lösung und sollte seinen Kommentar in eine Antwort ändern;)quelle
Es gibt zwei Lösungen, die ich mir vorstellen kann:
Der einfachere Weg - Erstellen Sie mithilfe der
Info.plist
Datei in jedem .app-Contents
Verzeichnis einen Index des Werts für die Schlüssel CFBundleExecutable. Fügen Sie dann einen kurzen Alias hinzu, der ein Skript (Perl, Python usw.) mit dem Namen einer ausführbaren Datei und den Argumenten aufruft, die Sie übergeben möchten.Ihr Index besteht aus zwei ausführbaren Namen und Pfaden zu diesen ausführbaren Dateien. Sie müssten ein wiederkehrendes geplantes Skript schreiben, um dies auf dem neuesten Stand zu halten.
Sie könnten am Ende anrufen:
Dabei ist f ein Alias für ein Skript, das Ihren Index auf eine ausführbare Datei mit dem Namen überprüft
foo
.Alles in allem ist nicht viel Arbeit erforderlich, um die gewünschte Funktionalität zu erhalten.
Der schwierigere Weg - Erweitern Sie Ihre Shell, um die
command_not_found
Fehlerbehandlung zu ergänzen . Im Wesentlichen würden Sie eine Ruby-method_missing
Funktionalität in der von Ihnen verwendeten Shell implementieren . Wenncommand_not_found
ausgelöst wurde, prüfte Ihre Methode die ausführbaren Namen Ihrer installierten Anwendungen.quelle
Applescript zur Rettung:
Ersetzen Sie den Namen der Anwendung durch die Anwendung, die Sie starten möchten, und fertig. Sie können es natürlich bei Bedarf zu einer Shell-Funktion machen:
und benutze es so:
Ich hasse AppleScript, aber es ist manchmal nützlich, und ich glaube, die einzige Möglichkeit, eine Anwendung einfach über den Namen in der Befehlszeile zu adressieren. Alles andere erfordert einen vollständigen Pfad.
quelle