Ich suche nach einer Möglichkeit, weitere Erweiterungen systematisch in die OS X-Startdienstdatenbank einzufügen, damit sie beim Klicken in der Terminal-App ausgeführt werden, genau wie Befehlsdateien standardmäßig.
Dinge wie .ksh
, .sh
und .csh
wäre schön zu beginnen, aber ich gehe davon aus, dass es einfach ist, den Rest zu erledigen, sobald ich herausgefunden habe, wie man eines hinzufügt.
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 nach Finder zu suchen und viel zu klicken.
quelle
Antworten:
Wenn eine Datei mit Terminal geöffnet wird und das Ausführungsbit gesetzt ist, führt Terminal es aus.
Rufen Sie Informationen zu einer .sh-Datei ab, stellen Sie ein, dass sie mit Terminal geöffnet werden soll, und klicken Sie auf die Schaltfläche Alle ändern.
quelle
Bevorzuziehen, dass Terminal .sh-Dateien öffnet - mit dem Standardbefehl, ohne Finder zu verwenden
In den meisten Fällen sollte alles, was erforderlich ist, über die Befehlszeile möglich sein…
Vorbereitung
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;"
Wenn einer der Befehle eine vorhandene Präferenz anzeigt
Verwenden Sie Xcode oder einen anderen geeigneten Eigenschaftenlisten-Editor, um das entsprechende 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 ungeeignet für das Entfernen eines einzelnen Wörterbuchs aus einem Array.sh
Dateien einer anderen Anwendung als der Systemvorgabe zuzuordnenPlistBuddy
Kredit - Daniel Beck .Hinzufügen zu den LaunchServices-Einstellungen, damit Terminal .sh-Dateien anzeigen und bearbeiten kann
Zwei einzeilige Befehle.
Abhängig von 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"; }'
Damit die neuen Präferenzen respektiert werden
Änderungen an der Persistenzschicht der Benutzerdomäne von Launch Services müssen bestätigt werden . Dies ist für den Endbenutzer am wenigsten störend:
Wenn ein sofortiger Neustart über die Befehlszeile akzeptabel ist:
sudo shutdown -r now
Hintergrund
Grundlegendes zur Terminal.app-Unterstützung für .sh (public.shell-script)
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 vom System deklarierte UTI, die mit verknüpft ist.sh
) wird auf dieser Ebene nicht unterstützt. Sie wird an anderer Stelle in der Eigenschaftsliste angezeigt - unterUTExportedTypeDeclarations
Terminal für einen Moment beiseite: Es ist manchmal unangemessen (oder einfach wertlos), das Öffnen eines Dokumenttyps durch eine App zu erzwingen, die ohne Unterstützung für diesen Typ entwickelt wurde.
Für Terminal stelle ich mir keinen Schaden im Umgang mit dem
public.shell-script
Typ vor.quelle
lsregister
. Aber (wie Sie unter der anderen Frage bemerken) ist die Verwendunglsregister
auf diese Weise nicht ohne Ärger. Ich werde etwas posten, um Different Chat um Ihre Aufmerksamkeit zu bitten.Die Unix-Methode besteht darin, Terminal.app zu öffnen und die Skripte auf ausführbar zu setzen
chmod +x scriptname.sh
.Sie können auch einen Link von / bin / bash zu / Applications erstellen und / Applications / bash als Standardanwendung für .sh-Dateien im Dialogfeld "Informationen" definieren. Aber das scheint meiner Meinung nach irgendwie komisch zu sein.
quelle