Saya melakukan cukup banyak pekerjaan di baris perintah, dan saya mendapati diri saya mendefinisikan banyak alias dalam bentuk:
alias skim='/Applications/Skim.app/Contents/MacOS/Skim'
Apakah ada cara untuk menambahkan sihir sehingga meminta "foo" yang dapat dieksekusi secara otomatis menggunakan executable /Applications/Foo.app/Contents/MacOS/Foo? Ini ada di OS X 10.6.
(Saya sadar bahwa saya bisa melakukannya open foo.pdf
, tetapi Skim bukan pembaca PDF default, dan saya ingin solusi umum - dalam beberapa kasus, tidak tepat untuk mengatur aplikasi yang dimaksud sebagai pengendali default untuk file tersebut.)
open -a Skim foo.pdf
.Jawaban:
Akhirnya saya mengerti: Tambahkan ini ke
.bash_profile
Sekarang pekerjaan berikut:
Edit oleh Reid:
Saya menerapkan di atas sebagai skrip Python yang membuat skrip wrapper alih-alih alias. Anda harus menempatkan
~/bin/mankoffmagic
jalan Anda. Jika Anda ingin pembungkus diperbarui secara otomatis, jalankan secara teratur dari cron atau semacamnya.sumber
ls
perintah, dan ini juga akan berfungsi di sana.Anda tidak perlu sesuatu yang mewah, Anda sudah memiliki jawabannya. Mencoba:
open /Applications/Foo.app bar.pdf
di sunting
Mengingat komentar di bawah ini, saya pikir jawaban saya masih akan relatif sama ... Saya akan membuat fungsi yang menimpa terbuka, melakukan pushd to
/Applications
, panggilan/usr/bin/open $appName.app $args
, melakukan popd dan kembali.Saya payah di skrip shell tetapi sesuatu seperti di bawah ini yang mencakup kasus-kasus khusus dan membuat Anda menggunakan sintaks yang sama seperti apel yang disediakan untuk terbuka. Saya suka menjaga lingkungan saya sebersih mungkin.
Saya yakin sintaksnya dari luar angkasa:
pada edit kedua
melihat komentar @ mankoff pada pertanyaan awal, sebagian besar hal dalam fungsi di atas mungkin akan membuang-buang waktu karena Anda hanya bisa menggunakan
open -a $appName
. Jadi mankoff mungkin memiliki solusi termudah dan harus mengubah komentarnya menjadi jawaban;)sumber
Ada dua solusi yang dapat saya pikirkan:
Cara yang lebih mudah - Menggunakan
Info.plist
file di setiapContents
direktori .app , buat indeks nilai untuk kunci CFBundleExecutable. Kemudian tambahkan alias pendek yang memanggil skrip (perl, python, apa pun) dengan nama yang dapat dieksekusi dan argumen yang ingin Anda sampaikan.Indeks Anda akan menjadi pasangan nama yang dapat dieksekusi dan jalur ke yang dapat dieksekusi tersebut. Anda harus menulis skrip terjadwal berulang untuk menjaga ini diperbarui.
Anda akhirnya bisa menelepon:
di mana f adalah alias untuk skrip yang memeriksa indeks Anda untuk nama yang dapat dieksekusi
foo
.Secara keseluruhan, tidak banyak pekerjaan untuk mendapatkan fungsionalitas yang Anda inginkan.
Cara yang lebih sulit - Perluas shell Anda untuk melengkapi penanganan
command_not_found
kesalahannya. Pada dasarnya Anda akan menerapkanmethod_missing
fungsionalitas gaya Ruby di dalam shell apa pun yang Anda gunakan. Ketikacommand_not_found
dilempar, metode Anda akan memeriksa nama yang dapat dieksekusi dari Aplikasi yang Anda instal.sumber
Tepuk tangan untuk menyelamatkan:
Ganti nama aplikasi dengan aplikasi yang ingin Anda mulai dan Anda selesai. Anda tentu saja dapat menjadikannya fungsi shell jika diperlukan:
dan gunakan seperti itu:
Saya benci applescript, tetapi kadang-kadang berguna, dan saya percaya satu-satunya cara untuk mengatasi aplikasi hanya dengan nama di baris perintah. Yang lainnya akan membutuhkan jalur penuh.
sumber