Jelas ada beberapa perbedaan antara file yang dapat dieksekusi dalam bin
direktori, 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
, .sh
atau .so
dalam 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 make
perintah 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/source
direktori 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
Makefile
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 .
atau source
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).