Jestem w stanie użyć mdls do wyświetlenia Uniform Type Identifier (UTI) dla dowolnego pliku, a także hierarchii typów, które są nadzbiórami konkretnego UTI.
mac:~ mike$ mdls -name kMDItemContentType -name kMDItemContentTypeTree foo.ksh
kMDItemContentType = "public.ksh-script"
kMDItemContentTypeTree = (
"public.ksh-script",
"public.shell-script",
"public.script",
"public.source-code",
"public.plain-text",
"public.text",
"public.data",
"public.item",
"public.content"
)
mac:~ mike$ mdls -name kMDItemContentType -name kMDItemContentTypeTree foo.command
kMDItemContentType = "com.apple.terminal.shell-script"
kMDItemContentTypeTree = (
"com.apple.terminal.shell-script",
"public.shell-script",
"public.script",
"public.source-code",
"public.plain-text",
"public.text",
"public.data",
"public.item",
"public.content"
)
Czy są jakieś narzędzia, które mogą pokazać, które aplikacje zostały zarejestrowane dla konkretnego interfejsu użytkownika, oprócz prób i błędów?
Z inspekcji jasno wynika, że foo.command
plik zostanie otwarty przez Terminal.app, ale wcale nie jest jasne, że foo.ksh należy obecnie do TextEdit.app.
Chciałbym móc bezpośrednio czytać bazę danych usług uruchamiania systemu Mac OS X bez konieczności korzystania open
z funkcji sprawdzania, która aplikacja jest wybierana na podstawie UTI. To tak, jakbyśmy mieli --preview --verbose
otwarte przełączniki, żeby powiedzieć mi, co powinien zrobić, niż robić to.
Jeszcze lepszy byłby sposób na wyświetlenie listy wszystkich aplikacji, które mogłyby otworzyć ten interfejs użytkownika, nawet jeśli nie są one preferowaną aplikacją.
Aby uzyskać te dodatkowe informacje, muszę utworzyć lub znaleźć plik dla każdego rodzaju zainteresowania i użyć Findera, aby ręcznie pokazać, które aplikacje mogą otworzyć ten interfejs użytkownika.
Naprawdę chciałbym mieć możliwość programowego dostępu do tych danych z terminala.
Odpowiedzi:
Duti Andrew Mortensena to CLI, który wyświetli listę programów obsługi UTI:
-d <uti>
wyświetla domyślny moduł obsługi;-l <uti>
wyświetla listę wszystkich zarejestrowanych handlerów.Zobacz stronę man dla duti .
EDYCJA: jak Lri wskazuje w tej odpowiedzi , duti nie wydaje się wymieniać wszystkich możliwych aplikacji (być może dlatego, że nie uwzględnia dziedziczenia UTI? To byłaby kwestia do dalszego zapytania). Jego zalecane rozwiązanie, AllApllications, byłoby oczywiście lepszą odpowiedzią.
źródło
Za pomocą tego polecenia można sprawdzić bazę danych usług uruchamiania. Opcja -dump daje ci całą bazę danych, następnie możesz przesłać ją do grep i wyszukać cokolwiek zechcesz.
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump | grep -n7 'your search string'
źródło