Tujuan saya adalah untuk memasukkan dalam file zip apa yang merupakan jalan pintas, daripada memberi tahu pelanggan saya untuk membuka Terminal dan menjalankan skrip shell.
Pada dasarnya saya bisa digunakan seperti ini:
$ unzip Deliverable.zip
$ cd Deliverable; ls
app.jar run.sh
Script dalam run.sh
:
#!/bin/sh
java -jar app.jar
Ada banyak lagi di direktori; Cukuplah untuk mengatakan saya perlu menjalankan skrip dari direktori Deliverable karena saya perlu mengakses jalur relatif terhadapnya. Namun, saya tidak dapat menjamin di mana pelanggan akan membuka Deliverable.zip
(bisa direktori home, bisa langsung di direktori Downloads, dll.)
Saya menemukan ini yang menjelaskan cara membuat alur kerja baru di Automator, lalu simpan sebagai aplikasi untuk meluncurkan skrip shell. Saya mencoba melakukan itu untuk membungkus run.sh
tetapi katanya tidak dapat menemukan run.sh
.
Seseorang menyarankan saya menggunakan applescript dan juga mengirimi saya tautan bagaimana cara menggunakan applescript untuk beralih ke direktori saat ini; ada "aksi" applescript di automator; jadi saya membuat alur kerja baru dengan itu, dan menyimpannya sebagai aplikasi. Seperti inilah tampilannya:
Kode:
on run {input, parameters}
tell application "Finder"
set current_path to container of (path to me) as alias
end tell
do shell script "java -jar app.jar"
return input
end run
Dan ini adalah kesalahan yang saya dapatkan ketika saya menjalankannya:
Ayo, ini seharusnya cukup sederhana. Apa yang saya lakukan salah di sini?
sumber
Jawaban:
Ganti nama file .sh Anda menjadi .command dan Anda dapat melakukan cd ke direktori di mana file .command berada di bawah ini di awal file:
sumber
Saya dapat melihat beberapa hal yang salah di sana.
Pertama, Anda telah membuka alur kerja dan bukan Aplikasi.
Anda harus memilih Aplikasi ketika Anda menentukan pilihan untuk jenis file Automator.
Dan kode yang Anda miliki tidak akan berfungsi seperti yang Anda harapkan, karena Anda belum mengubah direktori. (CD).
Dalam kode seperti yang Anda miliki, semua yang dilakukannya adalah mendapatkan path sebagai alias dan menyimpannya dalam variabel current_path dan dalam format yang tidak cocok untuk perintah unix.
Tetapi Anda tidak menggunakannya.
Jadi direktori saat ini kemungkinan besar akan menjadi folder rumah Anda
Pada tahap ini tidak ada yang tahu apa yang ingin diluncurkan.
Jika saya menjalankannya seperti yang Anda miliki saya dapatkan.
Yang masuk akal karena saya tidak menginstal Java. Tetapi jika saya melakukannya saya tidak akan berharap untuk menemukan file yang tepat.
Applescript harus terlihat seperti ini.
Dalam contoh saya
Saya cd ke jalur POSIX alias di variabel current_path
yaitu dari "alias" Macintosh HD: Aplikasi: "" ke "/ Aplikasi /"
The
quoted form of
lolos jalur menggunakan tanda kutip.Saya telah menggunakan perintah / bin / ls dan pipa ke terbuka di stdin TextEdit sebagai demonstrasi di sini sehingga Anda dapat menguji untuk melihat apakah Anda mendapatkan ke daerah yang Anda harapkan.
Anda akan menggunakan sesuatu seperti;
memperbarui:
Cara lain hanya menggunakan Applescript murni.
sumber
ls | open
kode pasti membuka direktori yang saya inginkan, yang hebat. Tetapi ketika saya menelepon terbukaClient.app
, saya mendapatkan:LSOpenURLsWithRole() failed with error -10665 for the file <path-to-Client.app>
- beberapa pencarian untuk apa kesalahan ini berarti menyarankan masalah izin, saya memeriksa dan+x
bendera ditetapkan. Saya juga mencoba ini , dan itu tidak berhasil (dengan kesalahan yang sama).Client.app
dari Finder (klik dua kali) juga menghasilkan pop-up kesalahan PowerPC yang sama.I call open Client.app
Apakah ini aplikasi Automator. Dari apa yang saya mengerti di automator Anda memiliki kode applescript:do shell script "cd " & quoted form of (POSIX path of current_path) & " ;\"java -jar app.jar\""
. Jadi di mana Anda menggunakanopen
perintah? yang sejauh yang saya mengerti apa yang Anda lakukan, Anda tidak perlu menggunakannya. Klien akan menggunakan klik dua kali pada aplikasi dan aplikasi akan menjalankan java$ open Client.app
dan dengan mengklik dua kali. Versi Anda dengan memanggills | open -fe
berfungsi, tetapi ketika saya mengubahnya untukjava -jar app.jar
itu memberi saya kesalahan itu.do shell script "cd " & quoted form of (POSIX path of current_path) & " ; " & quoted form of "java -jar app.jar"
Path to Script
Di AppleScript Anda, Anda perlu mengubah direktori kerja saat ini (cwd) sebelum mengeluarkan perintah java. Lakukan ini dengan garis AppleScript seperti:
Itu
&&
penting. Jikacd
berhasil,java
perintah akan diluncurkan dalam cwd kanan . Jikacd
gagal,java
perintah tidak akan dijalankan.Masalah yang kemungkinan akan Anda temui meliputi:
cd
; pengguna akan memiliki aneh nama folder dan spasi di jalur mereka.cd
mungkin gagal; bungkus AppleScript Anda dalam blok coba untuk menangkap beberapa kesalahan dan memperingatkan pengguna.perl
Secara pribadi, saya akan membungkus menggunakan skrip perl pendek sebagai pengganti skrip bash.
Ada banyak cara yang lebih baik untuk menulis potongan perl ini tetapi ini harus bekerja.
Aplikasi Pengotomasi
Pendekatan terbaik adalah mengatasi masalah dengan pendekatan Automator Anda. Jawaban @ markhunte membahas cara memperbaiki jalur dan membuat aplikasi . Ini seharusnya membantu Anda.
Juga lihat jalur AppleScript relatif terhadap lokasi skrip .
appify - buat aplikasi Mac sesederhana mungkin dari skrip shell
Atau, Anda dapat menggunakan skrip appify Thomas Aylott untuk menggabungkan skrip shell Anda ke dalam aplikasi OS X. Artikel Mathias Bynen membahas cara menggunakan skrip, cara membuat aplikasi Mac sederhana dari skrip shell .
Peningkatan yang disumbangkan komunitas untuk skrip ini tersedia:
Penandatanganan Kode
Setelah Anda membuat bundel aplikasi Anda, itu harus ditandatangani kode. Aplikasi bertanda kode akan diluncurkan tanpa mengharuskan klien Anda menonaktifkan Gatekeeper.
Tanda tangani aplikasi Anda menggunakan ID Pengembang Apple Anda dan
codesign
perintah:Pelajari lebih lanjut tentang penandatanganan kode di situs Pengembang Apple.
sumber
Gunakan Platypus : "Platypus adalah alat pengembang OS X yang membuat aplikasi Mac asli dari skrip yang ditafsirkan ..."
sumber
Anda dapat mengubah
run.sh
kerun.command
dan mendapatkan pengguna untuk klik dua kali itu?sumber
cd ~
), yang menyebabkannya gagal.Inilah pendapat saya tentang apa yang saya pahami sedang Anda coba capai. Kode ini sengaja dibuat panjang lebar.
Yang perlu Anda lakukan adalah menyalin kode ke Editor Applescript, buat perubahan apa pun yang Anda inginkan dan simpan sebagai aplikasi.
Adapun dialog tentang aplikasi PowerPC tidak didukung, saya tidak tahu. Bisakah Anda menjalankannya dari baris perintah? Saya akan memeriksa untuk mengonfirmasi aplikasi berfungsi terlebih dahulu.
sumber