Jelas ada beberapa perbedaan antara file yang dapat dieksekusi dalam bindirektori, dan file "sumber" yang dapat diedit.
- Untuk file sumber, akan sangat membantu untuk memiliki akhiran sehingga Anda dapat melihat apa itu, dan untuk membantu beberapa alat yang kurang cerdas yang gagal untuk memindai
#!baris.
- Untuk modul, mereka hanya digunakan oleh serangkaian program terkait, yang semuanya menggunakan penerjemah yang sama (atau tidak ada penerjemah), dan itu adalah konvensional untuk dimasukkan
.pm, .shatau .sodalam kasus seperti itu.
- Untuk program yang dapat dieksekusi, namanya adalah bagian dari "kontrak pemrograman" yang digunakan pengguna dan skrip lain untuk menjalankannya. Penting bahwa nama tersebut tidak berubah bahkan jika implementasinya berubah ; jadi jelas nama file tidak boleh memiliki akhiran
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 makeperintah mempertahankan pemisahan nosional antara "kode sumber untuk skrip" dan "versi skrip yang dapat dieksekusi": "kompiler" default untuk "skrip shell" hanyalah cp.
Saya akan merekomendasikan menyimpan $HOME/sourcedirektori terpisah , dan baik:
- menjaga symlink, seperti yang dibuat oleh
ln -s ../source/foo.sh $HOME/bin/foo; atau
- menyalinnya secara manual setelah membuat perubahan (dan mengujinya), menggunakan
install -m 755 foo.sh ../bin/foo; atau
- menggunakan
Makefileaturan untuk melakukan pemeriksaan sintaksis sebelum menyalin file sumber dari $HOME/sourceke$HOME/bin
Catatan kaki: modul shell script hanya dapat digunakan oleh shell script lain, dan memodifikasi konteks internal script yang menggunakan .atau sourcebuilt-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.shsedangkan perintah masuk /usr/bin/name_of_command(tanpa akhiran apa pun).