Ich suche nach einer Möglichkeit, weitere Erweiterungen systematisch in die Datenbank der OS X-Startdienste einzufügen, damit sie beim Klicken in der Terminal-App ausgeführt werden, genau wie standardmäßig .command-Dateien.
Dinge wie .ksh
, .sh
, und .csh
wären nett zu beginnen, aber ich nehme an, sobald ich herausgefunden habe, wie man eins hinzufügt, ist es einfach, den Rest zu erledigen.
Eine Antwort speziell für Lion oder Snow Leopard ist in Ordnung, daher ist eine allgemeine Antwort für alle Betriebssystemversionen nicht erforderlich. Es wäre großartig, wenn dies skriptfähig wäre und direkt in die Launch Services-Datenbank geschrieben würde, damit ich dies automatisieren könnte, anstatt auf jedem Mac zum Finder zu gehen und viel zu klicken.
Wenn eine Datei mit Terminal geöffnet wird und das Ausführungsbit gesetzt ist, führt Terminal sie aus.
Holen Sie sich Informationen zu einer .sh-Datei und legen Sie fest, dass sie mit Terminal geöffnet werden soll, und klicken Sie auf die Schaltfläche Alle ändern.
In den meisten Fällen sollte alles Erforderliche von der Kommandozeile aus möglich sein …
Zwei Befehle:
defaults read com.apple.LaunchServices | grep -B 1 -A 3 public.shell-script
defaults read com.apple.LaunchServices | grep -B 1 -A 4 "LSHandlerContentTag = sh;"
Verwenden Sie Xcode oder einen anderen geeigneten Eigenschaftslisten-Editor, um das relevante Wörterbuch aus dem LSHandlers
Schlüssel in der folgenden Datei zu entfernen:
~/Library/Preferences/com.apple.LaunchServices.plist
Hinweise:
defaults
, mit dem ich besser vertraut bin, scheint zum Entfernen eines einzelnen Wörterbuchs aus einem Array ungeeignet zu sein.sh
Dateien mit einer anderen Anwendung als der Standardanwendung des Systems zu verknüpfenPlistBuddy
— Anerkennung an Daniel Beck verwendet .Zwei einzeilige Befehle.
Je nach Ihren Anforderungen kann der erste Befehl allein ausreichen:
defaults write com.apple.LaunchServices LSHandlers -array-add '{ LSHandlerContentType = "public.shell-script"; LSHandlerRoleViewer = "com.apple.Terminal"; LSHandlerRoleEditor = "com.apple.Terminal"; }'
defaults write com.apple.LaunchServices LSHandlers -array-add '{ LSHandlerContentTag = "sh"; LSHandlerContentTagClass = "public.filename-extension"; LSHandlerRoleViewer = "com.apple.Terminal"; LSHandlerRoleEditor = "com.apple.Terminal"; }'
Änderungen an der Benutzerdomänen-Persistenzschicht von Launch Services müssen bestätigt werden . Am wenigsten störend für den Endbenutzer sind dabei:
Über die Befehlszeile, wenn ein sofortiger Neustart akzeptabel ist:
sudo shutdown -r now
Betrachten Sie das Ergebnis des folgenden Befehls:
defaults read /Applications/Utilities/Terminal.app/Contents/Info
Unter CFBundleDocumentTypes
( eine Reihe von Wörterbüchern, die die vom Bundle unterstützten Dokumenttypen beschreiben ) sehen wir, dass Terminal für die Unterstützung ausgelegt istcom.apple.terminal.shell-script
public.shell-script
(die systemdeklarierte UTI , die mit verknüpft .sh
ist) wird auf dieser Ebene nicht unterstützt, sie erscheint an anderer Stelle in der Eigenschaftsliste – unterUTExportedTypeDeclarations
Terminal für einen Moment beiseite: Es ist manchmal unangemessen (oder einfach wertlos), das Öffnen eines Dokumenttyps durch eine App zu erzwingen, die diesen Typ nicht unterstützt.
Für Terminal stelle ich mir keinen Schaden im Umgang mit dem public.shell-script
Typ vor.
lsregister
complete. Aber (wie Sie unter der anderen Frage anmerken) ist die Verwendung lsregister
auf diese Weise nicht ohne Ärger. Ich werde etwas an Ask Different Chat posten, um Sie darauf aufmerksam zu machen.
Fahrrad
Graham Perrin
Graham Perrin