Bagaimana cara membuat file.sh ini dapat dieksekusi melalui klik ganda?

165

Pertama saya menggunakan Mac.

Selanjutnya, saya harus menjalankan "file.sh" ini, kita akan menyebutnya. Setiap kali saya perlu menjalankannya saya harus membuka Terminal dan mengetik:

cd /Users/Jacob/Documents/folderWithFileInIt
bash file.sh

Ini oke, tapi saya merasa akan jauh lebih cepat jika saya membuat file dieksekusi pada klik ganda, bukan begitu?

Jadi pertanyaan saya adalah, bagaimana cara membuat file ini dapat dieksekusi melalui klik ganda?

Ide saya adalah:

a) ketikkan sesuatu seperti chmod ke terminal dan ubah izin?

b) membuat file, memasukkan kode yang saya tulis di atas ^ dan kemudian membuat file itu dapat dieksekusi?

c) entah bagaimana membuat otomatisasi untuk melakukan ini?

Jalan mana yang terbaik, atau adakah jalan yang lebih baik? Tolong jelaskan sebanyak mungkin, saya baru di Terminal. Terima kasih.

Yakub
sumber
1
Jika Anda ingin skrip yang bagus dan mudah diklik, maka ya, Automator adalah alat yang tepat. Anda sepertinya tahu itu dari pertanyaan Anda, jadi apa pertanyaan Anda?
Rob Napier
Pertanyaan yang sama tetapi saya punya jdk dmg, beberapa folder aplikasi untuk membuat ikon, beberapa Jar .. tapi saya gagal menjalankan / membuat melalui automator atau .command
SANTOSH

Jawaban:

349

Secara default, *.shfile dibuka di editor teks (Xcode atau TextEdit). Untuk membuat skrip shell yang akan dijalankan di Terminal saat Anda membukanya, beri nama dengan ekstensi "perintah", misalnya,file.command ,. Secara default, ini dikirim ke Terminal, yang akan mengeksekusi file sebagai skrip shell.

Anda juga perlu memastikan file tersebut dapat dieksekusi, misalnya:

chmod +x file.command

Tanpa ini, Terminal akan menolak untuk mengeksekusinya.

Perhatikan bahwa skrip tidak harus diawali dengan #!awalan dalam skenario khusus ini, karena Terminal secara khusus mengatur untuk mengeksekusinya dengan shell default Anda. (Tentu saja, Anda dapat menambahkan#! baris jika Anda ingin menyesuaikan shell mana yang digunakan atau jika Anda ingin memastikan bahwa Anda dapat menjalankannya dari baris perintah saat menggunakan shell yang berbeda.)

Perhatikan juga bahwa Terminal mengeksekusi skrip shell tanpa mengubah direktori kerja. Anda harus memulai skrip dengan cdperintah jika Anda benar-benar membutuhkannya untuk dijalankan dengan direktori kerja tertentu.

Chris Page
sumber
1
Terima kasih atas jawaban yang lebih bermanfaat.
Jacob
46
Anda juga dapat menggunakan cd "`dirname "$0"`"untuk mengatur direktori kerja saat ini ke direktori tempat skrip shell Anda berada.
gearsdigital
3
Untuk alasan estetika Anda juga harus mengklik kanan pada file .command dan membuka info. Di sana Anda memiliki opsi untuk menyembunyikan sufiks (dengan nama & sufiks).
Bijan
Saya menggunakan metode ini untuk menjalankan aplikasi melalui open -n ...perintah. Ini berfungsi, tetapi setiap kali jendela Terminal terbuka dan menunjukkan kepada saya "[Proses selesai]". Apakah mungkin untuk mencegah tampilan jendela Terminal entah bagaimana?
Nik
1
@Nik Tidak ada gunanya menjalankannya di Terminal jika Anda tidak ingin itu muncul di jendela terminal. Sebagai gantinya, buatlah bundel aplikasi yang dapat dieksekusi adalah skrip shebang. Atau buat applet AppleScript atau Automator yang menjalankan skrip. Anda juga dapat menggunakan Terminal Preferences untuk mengubah profil untuk menutup jendela ketika proses keluar, tetapi itu bukan solusi terbaik jika Anda hanya ingin menjalankan skrip shell tanpa interaksi pengguna.
Chris Halaman
31

Hapus ekstensi sama sekali lalu klik dua kali. Kebanyakan skrip shell sistem seperti ini. Selama ia memiliki shebang, itu akan berhasil.

NobleUplift
sumber
1
BTW, "shebang" sebagian besar adalah baris ini di depan semua baris: #! / Bin / sh tetapi bisa berbeda, baca tautan yang disediakan untuk kasus lain.
Lukas Liesis
Apakah pendekatan ini tidak perlu dilakukan chmod?
Atul
11

Anda bisa memberi tahu Finder untuk membuka .shfile di Terminal:

  1. Pilih file
  2. Dapatkan Info (cmd-i) di dalamnya
  3. Di bagian "Buka dengan", pilih "Lainnya ..." di menu sembulan
  4. Pilih Terminal sebagai aplikasi

Ini akan memiliki efek yang sama persis seperti mengubah nama menjadi .commandkecuali ... Anda tidak harus mengubah nama itu :)

Markus Amalthea Magnuson
sumber
8
  1. Luncurkan Terminal
  2. Ketik -> nano fileName
  3. Tempel konten file Batch dan simpan
  4. Ketik -> chmod + x fileName
  5. Ini akan membuat file exe sekarang Anda dapat mengklik dua kali dan itu.

Nama file harus di bawah tanda kutip ganda. Karena saya menggunakan Mac-> Dalam kasus saya konten file batch adalah

cd / Pengguna / NamaAnda / Dokumen / SeleniumServer

java -jar selenium-server-standalone-3.3.1.jar -role hub

Pasti akan berhasil

Manish
sumber
0

Anda dapat mengubah file yang dapat dieksekusi dengan menggunakan chmodseperti ini

chmod 755 file.sh

dan gunakan perintah ini untuk mengeksekusi

./file.sh
Night Coder
sumber
Selamat datang di SO! Jawaban Anda tidak menambahkan apa pun ke jawaban yang sudah diterima. Tolong jelaskan mengapa ini berbeda dari jawaban lain yang sudah ada.
GabrielOshiro