Saya memiliki banyak skrip executable linting tangan di direktori $ HOME / bin saya. Beberapa ditulis dalam bash, beberapa di Ruby. Semua dari mereka memiliki garis shebang di bagian atas memberitahu shell apa juru bahasa untuk digunakan (bash atau Ruby, dalam kasus saya).
Saya ingin tahu apakah lebih baik meletakkan ekstensi file pada skrip ini untuk menunjukkan bahasa skrip apa yang mereka tulis? Misalnya, skrip di Ruby akan memiliki akhiran * .rb, dan yang bash akan memiliki akhiran * .sh.
Saat ini, skrip ini hanya memiliki nama sederhana tanpa ekstensi file.
Apa praktik terbaik?
bash
script
shell-script
dan
sumber
sumber
Jawaban:
Anda dapat melakukan perintah wildcard seperti
ls *.rb
ataucp *.sh
jika Anda ingin mengatur skrip Anda di masa depan.Mulai lebih awal atau menyesal kemudian, menurut pendapat saya.
Editor seperti
vim
juga akan dapat menerapkan penyorotan sintaks yang benar berdasarkan ekstensi file atau shebang .Ini juga dapat dicapai dengan menggunakan modelines di berbagai editor. Misalnya untuk vim:
sumber
Yah - seperti kebanyakan hal dalam hidup: Itu tergantung pada kebutuhan Anda.
Anda menyatakan bahwa skrip ini berada di direktori bin dan saya berasumsi bahwa skrip ini harus dipanggil dari baris perintah. Sebagai pengguna saya menganggapnya menjengkelkan jika saya harus mengetik bla.ksh atau foo.bash. Juga jika pembuat kode memutuskan untuk pindah ke juru bahasa lain nama perintah akan berubah juga dan saya harus mengubah skrip lain yang menggunakan alat-alat ini - sangat menjengkelkan, bahkan jika pengguna dan pembuat kode adalah orang yang sama.
Tetapi di sisi lain saya menggunakan ekstensi seperti .sh atau .tcl dalam proyek saya membangun direktori. Dengan cara ini saya dapat menggunakan fitur make untuk menyebarkan file ke direktori tujuan mereka - tetapi pada tahap ini saya menghapus akhiran file.
sumber
Jelas ada beberapa perbedaan antara file yang dapat dieksekusi dalam
bin
direktori, dan file "sumber" yang dapat diedit.#!
baris..pm
,.sh
atau.so
dalam kasus seperti itu.Dalam kasus program yang dikompilasi, perbedaan antara "sumber" dan "dieksekusi" jelas: satu berisi kode sumber, yang lain berisi bahasa mesin atau diterjemahkan dengan bytecode. Dalam kasus skrip, tidak ada perbedaan yang jelas, tetapi
make
perintah mempertahankan pemisahan nosional antara "kode sumber untuk skrip" dan "versi skrip yang dapat dieksekusi": "kompiler" default untuk "skrip shell" hanyalahcp
.Saya akan merekomendasikan menyimpan
$HOME/source
direktori terpisah , dan baik:ln -s ../source/foo.sh $HOME/bin/foo
; atauinstall -m 755 foo.sh ../bin/foo
; atauMakefile
aturan untuk melakukan pemeriksaan sintaksis sebelum menyalin file sumber dari$HOME/source
ke$HOME/bin
Catatan kaki: modul shell script hanya dapat digunakan oleh shell script lain, dan memodifikasi konteks internal script yang menggunakan
.
atausource
built-in perintah. Ini berbeda dari skrip yang dapat dieksekusi, yang (seperti program apa pun) berjalan sebagai proses terpisah dan tidak dapat mengubah proses induknya. Sebagai konvensi kasar, modul masuk/usr/lib/name_of_program/name_of_module.sh
sedangkan perintah masuk/usr/bin/name_of_command
(tanpa akhiran apa pun).sumber
Itu tidak perlu. Kernel sudah diinformasikan tentang penerjemah yang tepat untuk digunakan (oleh
#!
baris), dan semua editor teks populer membacanya juga, jadi menambahkan ekstensi tidak akan berguna, hanya meningkatkan pengetikan. Satu-satunya saat program yang dapat dieksekusi memiliki ekstensi adalah ketika itu entah bagaimana penting (untuk program atau pengguna atau keduanya).Modul dan pustaka, di sisi lain, hampir selalu memiliki ekstensi (
.rb
untuk modul Ruby,.so
untuk pustaka bersama ELF, dan sebagainya).sumber