Bagaimana cara saya membuat skrip shell untuk dieksekusi dari dock Mac OSX? Tampaknya hanya dengan membuat pintasan akan membuka file di editor saya. Apakah ada bendera yang harus saya atur di suatu tempat untuk memerintahkan agar dijalankan alih-alih membukanya untuk diedit?
160
Jawaban:
Anda dapat membuat alur kerja Automator dengan satu langkah - "Jalankan Script Shell"
Kemudian
File > Save As
, dan ubah Format File menjadi "Aplikasi". Saat Anda membuka aplikasi, itu akan menjalankan langkah Shell Script, menjalankan perintah, keluar setelah selesai.Keuntungan dari hal ini adalah sangat sederhana untuk dilakukan, dan Anda dapat dengan mudah mendapatkan input pengguna (katakanlah, memilih banyak file), kemudian meneruskannya ke input skrip shell (baik untuk stdin, atau sebagai argumen).
(Automator ada di
/Applications
folder Anda !)sumber
open -a SomeAppThing.app --args --etc=2
itu harus fokus. Atau Anda dapat memfokuskannya menggunakan Applescript (mis.osascript -e 'tell application "Google Chrome" to activate'
)Jika Anda tidak memerlukan jendela Terminal, Anda dapat membuat file yang dapat dieksekusi sebagai Aplikasi hanya dengan membuat skrip shell
Example
dan memindahkannya ke nama fileExample.app/Contents/MacOS/Example
. Anda dapat menempatkan aplikasi baru ini di dok Anda seperti yang lain, dan jalankan dengan klik.CATATAN: nama aplikasi harus sama persis dengan nama skrip. Jadi direktori tingkat atas harus
Example.app
dan skrip dalamContents/MacOS
subdirektori harus dinamaiExample
, dan skrip harus dieksekusi.Jika Anda perlu memiliki jendela terminal ditampilkan, saya tidak punya solusi sederhana. Anda mungkin bisa melakukan sesuatu dengan Applescript, tapi itu tidak terlalu bersih.
sumber
example.sh.app
, bukan hanyaexample.app
. Anda akan mendapatkan peringatan tentang aplikasi yang rusak jika ini tidak cocok.app
dan dengan struktur itu, itu akan diperlakukan sebagai Aplikasi yang dapat dieksekusi. Jika Anda ingin melihat isi folder itu di Finder, Anda harus mengklik kanan padanya dan memilih "melihat isi paket" (karena mengklik dua kali pada itu akan menjalankan aplikasi). Di Terminal, itu hanya akan muncul menjadi folder. (Saya tidak yakin apakah Finder akan membiarkan Anda mengganti nama folder menjadi .app dengan sendirinya; Anda mungkin perlu melakukan penggantian nama di Terminal.)Di OSX Mavericks:
Jadikan skrip shell Anda dapat dieksekusi:
Ubah nama skrip Anda untuk memiliki
.app
akhiran:Ganti nama skrip Anda kembali menjadi
.sh
suffix:Sekarang ketika Anda mengklik skrip di dok, jendela terminal akan muncul dan menjalankan skrip Anda.
Bonus: Untuk menutup terminal ketika skrip Anda telah selesai, tambahkan
exit 0
di akhir dan ubah pengaturan terminal menjadi "tutup shell jika keluar dengan bersih" seperti yang dikatakan dalam jawaban SO ini .sumber
Saya tahu ini sudah lama tetapi jika bermanfaat bagi orang lain:
Jika Anda perlu menjalankan skrip dan ingin terminal muncul sehingga Anda dapat melihat hasil yang dapat Anda lakukan seperti yang dikatakan Abyss Knight dan mengubah ekstensi menjadi .command. Jika Anda mengklik dua kali di atasnya itu akan membuka jendela terminal dan berjalan.
Namun saya membutuhkan ini untuk dijalankan dari automator atau appleScript. Jadi untuk mendapatkan ini untuk membuka terminal baru perintah yang saya jalankan dari "run shell script" adalah "open myShellScript.command" dan dibuka di terminal baru.
sumber
Selama skrip Anda dapat dieksekusi dan tidak memiliki ekstensi apa pun, Anda dapat menyeretnya apa adanya ke sisi kanan (sisi Dokumen) dari Dok dan akan berjalan di jendela terminal saat diklik alih-alih membuka editor.
Jika Anda ingin memiliki ekstensi (seperti foo.sh), Anda dapat pergi ke jendela info file di Finder dan mengubah aplikasi default untuk skrip tertentu dari apa pun itu (TextEdit, TextMate, apa pun default yang ditetapkan pada komputer Anda untuk File .sh) ke Terminal. Kemudian hanya akan menjalankan bukannya membuka dalam editor teks. Sekali lagi, Anda harus menyeretnya ke sisi kanan Dock.
sumber
Saya pikir utas ini mungkin membantu: http://forums.macosxhints.com/archive/index.php/t-70973.html
Untuk memparafrasekan, Anda dapat mengganti nama dengan ekstensi .command atau membuat AppleScript untuk menjalankan shell.
sumber
Seperti yang disebutkan joe, membuat skrip shell dan kemudian membuat skrip applescript untuk memanggil skrip shell, akan mencapai ini, dan sangat berguna.
Script Shell
Buat skrip shell Anda di editor teks favorit Anda, misalnya:
mono "/Volumes/Media/~Users/me/Software/keepass/keepass.exe"
(ini menjalankan executable w32, menggunakan kerangka kerja mono)
Simpan skrip shell, untuk contoh saya "StartKeepass.sh"
Skrip Apple
Buka AppleScript Editor, dan panggil skrip shell
do shell script "sh /Volumes/Media/~Users/me/Software/StartKeepass.sh" user name "<enter username here>" password "<Enter password here>" with administrator privileges
do shell script
- perintah applescript untuk memanggil perintah shell eksternal"sh ...."
- ini adalah skrip shell Anda (path lengkap) yang dibuat pada langkah pertama (Anda juga dapat menjalankan perintah langsung, saya bisa menghilangkan skrip shell dan jalankan perintah mono saya di sini)user name
- menyatakan ke applescript Anda ingin menjalankan perintah sebagai pengguna tertentu"<enter username here>
- ganti dengan nama pengguna Anda (menjaga kutipan) ex "josh"password
- menyatakan untuk menuliskan sandi Anda"<enter password here>"
- ganti dengan kata sandi Anda (menjaga tanda kutip) ex "mypass"with administrative privileges
- menyatakan Anda ingin menjalankan sebagai adminBuat .APP Anda
simpan applescript Anda sebagai filename.scpt, dalam kasus saya RunKeepass.scpt
simpan sebagai ... applescript Anda dan ubah format file ke aplikasi, menghasilkan RunKeepass.app dalam kasus saya
Salin file aplikasi Anda ke folder aplikasi Anda
sumber
Di Editor Skrip:
do shell script "/full/path/to/your/script -with 'all desired args'
"Simpan sebagai bundel aplikasi.
Selama semua yang Anda ingin lakukan adalah mendapatkan efek dari skrip, ini akan berfungsi dengan baik. Anda tidak akan melihat STDOUT atau STDERR.
sumber
Seseorang menulis ...
sumber