Di wikipedia, artikel untuk .sh mengatakan:
Untuk jenis ekstensi file .sh, lihat Bourne shell .
Bagaimana dengan shell unix lainnya?
Saya tahu bahwa shebang digunakan di dalam file untuk menunjukkan penerjemah untuk dieksekusi, tapi saya bertanya-tanya:
- Apa pro dan kontra untuk ekstensi file vs tidak ada ekstensi file?
shell-script
files
scripting
filenames
conventions
Amelio Vazquez-Reina
sumber
sumber
bash script.sh
(ataush
, tentu saja).Jawaban:
Saya hanya akan memanggil
.sh
sesuatu yang dimaksudkan untuk menjadi portabel (dan mudah-mudahan adalah portable).Kalau tidak, saya pikir lebih baik menyembunyikan bahasa. Pembaca yang teliti akan menemukannya di baris shebang. (Dalam prakteknya,
.bash
atau.zsh
, dll ... sufiks jarang digunakan.)sumber
Saya akan mengatakan bahwa tidak ada "praktik yang baik" untuk ekstensi file ada, hanya pada teknis: sistem file Unix / Linux / * BSD tidak mendukung ekstensi per se. Apa yang Anda panggil ekstensi hanyalah sufiks dari satu nama file. Itu berbeda dari sistem file dan OS VM / CMS, VMS, MS-DOS dan Windows di mana tempat khusus dalam inode-moral-equivalen disediakan untuk ekstensi.
Kata-kata kasar kecil itu sudah berakhir, saya pikir agak konyol untuk menambahkan akhiran ".sh" atau ".ksh" atau ".bash" pada nama file skrip shell. Suatu program adalah program: tidak ada manfaat dalam membedakan apa yang dijalankan. Tidak ada unix atau linux atau kernel apa pun yang telah memutuskan untuk memanggil juru bahasa pada beberapa file hanya karena akhiran nama file. Itu semua dilakukan oleh
#!
baris, atau urutan "angka ajaib" byte lain di awal file. Faktanya, memutuskan apa yang akan dieksekusi berdasarkan nama file "ekstensi" adalah salah satu faktor yang menjadikan Windows sebagai magnet malware. Lihatlah berapa banyak penipuan malware Windows yang melibatkan file bernama "something.jpg.exe" - secara default Windows yang lebih baru tidak menunjukkan ekstensi ".exe", dan dorong pengguna untuk mengklik dua kali pada "Apa yang Anda anggap sebagai perintah langsung seringkali adalah sebuah shell script. Kadang-kadang
cc
telah menjadi sh-script,firefox
adalah sh-script,startx
adalah sh-script. Saya tidak percaya ada manfaat kognitif atau organisasi untuk menandai skrip dengan akhiran ".sh".sumber
.sh
ekstensi skrip shell , Anda harus mengetiknya.sh
sebagai bagian dari nama perintah saat memulai. Itulah alasan utama mengapa saya tidak suka memasukkan ekstensi itu (sama dengan apa pun yang memiliki garis shebang). BTW, masalah di Windows bukanlah.exe
awalan per se (itu sepele untuk membuat executable bernamaimage.jpg
di Linux, setelah semua), tetapi fakta bahwa Windows biasanya menyembunyikan ekstensi itu, dikombinasikan dengan fakta bahwa tindakan yang diperlukan untuk memulai executable dan untuk membuka dokumen persis sama.Sebagai orang yang telah bekerja di banyak lingkungan, saya harus menulis dalam berbagai kerang. Percaya atau tidak, di seluruh platform, cangkang tidak sama. Jadi, jika Anda mengelola perpustakaan pribadi Anda di beberapa shell (jika perlu), sangat membantu untuk menggunakan ekstensi untuk mengidentifikasi shell. Dengan begitu ketika Anda pindah ke platform lain dan shell sedikit berbeda, Anda tahu skrip apa yang akan ditargetkan untuk modifikasi. .sh .ksh .bsh .csh ...
sumber
#!
di awal skrip (misalnya#!/bin/bash
)?Anda tidak boleh menggunakan ekstensi untuk executable, karena mereka tidak dapat dipertukarkan. Bayangkan Anda memiliki skrip shell
a.sh
, kemudian menulis ulang dengan pythona.py
, Anda sekarang harus mengubah setiap program yang memanggil Anda skrip, Anda telah membocorkan detail implementasi.Seluruh ekstensi file-nama di Windows Mircosoft berantakan: misalnya apa yang bisa
a.audio, b.audio, c.audio
, sedanga.mp3, b.wav, c.ogg
, dand.picture, e.picture, f.picture
sedangd.jpeg, e.png, f.gif
. Sebagian besar waktu kita tidak peduli apa format audio atau gambar. Kita juga harus menghabiskan waktu lama mengajar pengguna baru semua ekstensi file.sumber
*.sh
baru saja saya temui adalah bahwa Debianrun-parts
tidak akan menjalankan skrip dengan ekstensi, seperti pada/etc/cron.*/
: archive.oreilly.com/pub/post/runparts_scripts_a_note_about.htmlSeperti yang Anda katakan, ekstensi file Unix adalah murni informasi. Anda hanya perlu skrip Anda untuk memiliki shebang yang benar dan dapat dieksekusi.
Anda tidak dapat memiliki ekstensi atau menggunakan
.sh
.Saya personnaly menggunakan konvensi berikut, terlepas dari shell yang digunakan (csh, tcsh, bash, sh, ...):
.sh
untuk script klasik, rendah untuk kelas tinggi.sumber
Ekstensi skrip Shell cukup berguna. Sebagai contoh, saya sering menulis skrip yang memiliki banyak file dalam berbagai bahasa (mis. Bash, awk, dan lua) di direktori yang sama. Jika saya perlu mencari string hanya di file bash, ekstensi membuatnya sangat berguna, untuk mengurangi kesalahan positif. Atau jika saya ingin melakukan penghitungan baris semua kode bash saya untuk proyek itu.
Sangat sulit harus mengetik ekstensi ketika menjalankan program, jadi saya juga membuat symlink tanpa ekstensi ke executable utama, untuk mengedit / menjalankannya tanpa perlu mengetik ekstensi setiap kali. Symlinks murah dan mudah.
sumber
Seperti yang orang lain katakan, shell tidak peduli dengan ekstensi. Namun, itu memungkinkan untuk mengidentifikasi file secara cepat. Saya melihat file yang diakhiri
.py
atau.sh
dan saya segera tahu apa yang seharusnya (setidaknya). Seperti kata Steve, mencari berdasarkan ekstensi file atau melakukan penghitungan baris juga merupakan pertimbangan praktis.sumber