Bagaimana saya bisa mengubah aplikasi default untuk semua file dari jenis file tertentu melalui Terminal di OS X?
macos
file-association
yashodhan
sumber
sumber
Jawaban:
Saya punya cara yang lebih sederhana. Anda akan menginginkan Homebrew jika Anda belum memilikinya:
Instal duti:
Sekarang Anda perlu menemukan id aplikasi yang ingin Anda gunakan, dan menetapkannya untuk ekstensi yang ingin Anda gunakan. Dalam contoh ini, saya sudah menggunakan tanda kurung untuk
*.sh
dan saya ingin juga menggunakannya untuk*.md
file, bukan xcode.Dapatkan id aplikasi default untuk
.sh
file:Baris terakhir adalah id.
Gunakan id aplikasi ini untuk semua
.md
file:sumber
osascript -e 'id of app "$appName"'
untuk mendapatkan id aplikasi apa pun yang terinstal di sistem Andaduti -s $(osascript -e 'id of app "Visual Studio Code"') .md all
Edit
~/Library/Preferences/com.apple.LaunchServices.plist
.Tambahkan entri di bawah
LSHandlers
, yang berisi UTI (kunciLSHandlerContentType
, mis.public.plain-text
) Dan pengidentifikasi bundel aplikasi (LSHandlerRoleAll
, miscom.macromates.textmate
.).Ini terlihat seperti ini di Editor Daftar Properti :
Untuk melakukan ini dari baris perintah, gunakan
defaults
atau/usr/libexec/PlistBuddy
. Keduanya memiliki halaman buku yang luas.Misalnya untuk membuka semua
.plist
file menggunakanXcode
:Tentu saja, Anda harus memastikan tidak ada entri lain untuk UTI yang
com.apple.property-list
sudah ada di sana.Berikut ini skrip yang lebih lengkap yang akan menghapus entri yang ada untuk ISK dan menambahkan yang baru. Ia hanya dapat menangani
LSHandlerContentType
, dan akan selalu disetelLSHandlerRoleAll
, dan memiliki ID bundel hard-coded alih-alih parameter. Selain itu, itu harus bekerja dengan baik.sumber
x=~/Library/Preferences/com.apple.LaunchServices.plist; plutil -convert xml1 $x; open -a TextEdit $x
menyalin dan menempelkan entri LSHandlers tersebut. Untuk mendapatkan pengidentifikasi bundel, Anda dapat melakukannyaosascript -e 'bundle identifier of (info for (path to app "TextEdit"))'
.defaults
tampaknya tidak mampu melakukannya, dan memerlukan beberapaPlistBuddy
panggilan. Tetapi dimungkinkan untuk melakukannya dalam skrip shell yang dapat digunakan kembali.