Saya mencoba menyiapkan beberapa pintasan keyboard yang membuka sesi khusus ITerm, yang dapat saya lakukan dengan BetterTouchTool dan sedikit sihir AppleScript. Masalahnya adalah bahwa OS X bersikeras untuk membuka jendela Terminal untuk skrip shell yang Anda jalankan melalui GUI (yaitu dari Finder, atau sebagai pintasan keyboard dari BetterTouchTool). Jendela terminal tidak muncul jika saya menjalankan skrip langsung dari terminal lain.
Solusi yang saya temukan adalah untuk membungkus skrip dalam direktori .app, yang memecahkan masalah jendela terminal yang berlebihan, tetapi memiliki beberapa masalah lain (misalnya OS X tampaknya memperlakukan setiap jendela iTerm yang dihasilkan sebagai aplikasi terpisah, mengacaukan dock saya. ). (EDIT: perilaku ini sebenarnya disebabkan oleh bug di skrip saya, lihat di bawah)
Saya juga mencoba menetapkan aplikasi Terminal ke desktop virtual lain di pengaturan Spaces dalam upaya untuk memindahkannya dari pandangan, tetapi kemudian hanya akan beralih ke desktop itu sebelum menjalankan skrip.
Apakah ada cara untuk menonaktifkan perilaku ini sepenuhnya? Saya sudah menemukan pengaturan di preferensi Terminal untuk menutup jendela setelah skrip selesai, tetapi masih menjengkelkan untuk memiliki jendela Terminal muncul sebentar.
sumber
Jawaban:
Buka Automator , pilih Aplikasi , tambahkan tindakan Run Shell Script dan masukkan perintah Shell Anda di antara tanda kutip (jika Anda memiliki file, Anda bisa seret dan jatuhkan).
Selain memainkannya, sekarang Anda dapat menyimpannya (sebagai aplikasi di mana saja) dan bahkan mengatur ikon .
sumber
&
dan kemudian memanggil AppleScript untuk membawa aplikasi (dalam kasus sayamplayer
) ke depan:mplayer myvideo.avi &; osascript -e 'tell application "System Events" to set frontmost of the first process whose displayed name is "mplayer" to true'
mplayer
untuk memutar video dari tayangan slide (dalam Skim). Ada bug yang disimpan pemain di latar belakang jika Skim diatur ke layar penuh, saya tidak yakin, apakah bug ini hanya terkait dengan Skim atau semua aplikasi layar penuh, jadi saya pikir saya akan memposting solusi saya di sini.Berikut ini adalah contoh cepat dan kotor dengan hampir tanpa usaha (untuk aplikasi bernama "myapp"):
Buat hierarki aplikasi parsial:
Pastikan baris pertama skrip Anda memiliki jalur lengkap ke program yang dibutuhkan, misalnya,
Beri nama skrip shell Anda "myapp" (tanpa tanda kutip, tidak ada ekstensi), berikan izin eksekusi, dan kemudian masukkan ke dalam sub-direktori MacOS. Untuk memberikannya jalankan izin:
Buka sub-direktori Isi dan buat file PkgInfo yang berisi string: APPL ???? [tanpa terminator garis di akhir string!] Gunakan utilitas cat (1) untuk membuat file:
Setelah Anda mengetikkan string (jangan tekan return!), Masukkan dua control-D, yang akan menutup
file tanpa terminator baris dan mengembalikan Anda ke prompt shell.)
Klik dua kali "aplikasi" baru Anda dari finder. Ini akan berjalan tanpa jendela.
sumber
Anda mungkin ingin memeriksa Platypus , yang membuat aplikasi Mac OS X dari skrip shell dan skrip yang diartikan lainnya.
sumber
Ini solusi kecil, jika Anda suka peluncur aplikasi seperti Alfred . Saya menggunakannya setiap hari, dan saya telah membeli Powerpack , yang memungkinkan Anda untuk menjalankan skrip shell diam.
Ini tidak akan membuka terminal saat dijalankan dan dapat terikat ke urutan kata kunci apa pun. Mereka bahkan dapat memasukkan parameter, dan memiliki opsi tambahan:
Saya menggunakan ini untuk beberapa cuplikan kecil, dan sangat fleksibel.
sumber
Jika Anda menambahkan kunci
LSUIElement
dan mengaturnya1
diInfo.plist
aplikasi Anda, itu tidak akan membuat ikon di Dock.Ini adalah
Info.plist
aplikasi skrip shell kecil saya:sumber
touch
bundel untuk memastikan versi terbaru digunakan. Tapi bagaimanapun, saya tidak terlalu suka pendekatan bundel karena sepertinya itu akan selalu membuat contoh aplikasi yang terpisahdo shell script "say 'arsti'"
, ini tidak akan membuka jendela terminal.pgrep
, dan kemudian meneruskan kode yang relevan langsung keosascript
(juru bahasa AppleScript). Masalahnya adalah itupgrep
datang dari Homebrew, dan tidak ada di default$PATH
. Jadi skrip saya selalu meluncurkan instance iTerm baru, bahkan jika sudah berjalan. Setelah menambahkan path lengkap kepgrep
dalam script pendekatan bundle tampaknya berfungsi dengan baik setelah semua, jadi saya pikir saya senang untuk saat ini ;-)CFBundleExecutable
danCFBundleIconFile
), saya membuat ini berfungsi dengan sempurna.Berikut sedikit solusinya:
Kompilasi applescript yang memanggil shell script :)
The
osacompile
akan mengkompilasi'do shell script "XXX"'
potongan applescript. Script shell Anda adalah XXX.Berhati-hatilah untuk mengutip, skrip shell harus dikutip dengan benar untuk melewati shell yang Anda gunakan untuk mengompilasinya masih utuh.
Tapi ini bisa dijalankan dari BetterTouchTool tanpa rasa ingin tahu.
sumber
Ada kemungkinan latihan lain. Amankan skrip shell Anda dalam alur kerja automator. Aktifkan alur kerja dengan launchd. Kode tersebut adalah:
Ini tidak akan meluncurkan program apa pun atau muncul di bilah menu dan caranya lebih hening daripada aplikasi Platypus.
Cara yang lebih baik untuk mengeksekusi skrip shell adalah langsung di launchd.
akan menjalankan perintah dengan sangat diam-diam di latar belakang.
sumber