Rõ ràng có một số khác biệt giữa các tệp thực thi trong các bin
thư mục và các tệp "nguồn" có thể chỉnh sửa.
- Đối với các tệp nguồn, thật hữu ích khi có hậu tố để bạn có thể xem những gì là gì và để giúp một số công cụ kém thông minh không quét được
#!
dòng.
- Đối với mô-đun, họ chỉ được sử dụng bởi một bộ có liên quan của chương trình, tất cả đều sử dụng thông dịch viên cùng (hoặc không có thông dịch viên), và nó là truyền thống bao gồm
.pm
, .sh
hoặc .so
trong những trường hợp như vậy.
- Đối với các chương trình thực thi, tên của nó là một phần của "hợp đồng lập trình" mà người dùng và các tập lệnh khác gọi nó. Điều quan trọng là tên không thay đổi ngay cả khi thực hiện; Vì vậy, rõ ràng tên tệp không nên có hậu tố
Trong trường hợp của một chương trình được biên dịch, sự khác biệt giữa "nguồn" và "thực thi" là rõ ràng: một cái chứa mã nguồn, cái kia chứa ngôn ngữ máy hoặc mã byte được giải thích. Trong trường hợp của tập lệnh, không có sự khác biệt rõ ràng, nhưng make
lệnh duy trì một sự tách biệt đáng chú ý giữa "mã nguồn cho tập lệnh" và "phiên bản thực thi của tập lệnh": trình biên dịch "mặc định" cho "tập lệnh shell" chỉ đơn giản là cp
.
Tôi khuyên bạn nên giữ một $HOME/source
thư mục riêng và:
- giữ một liên kết tượng trưng, chẳng hạn như được thực hiện bởi
ln -s ../source/foo.sh $HOME/bin/foo
; hoặc là
- tự sao chép chúng sau khi thực hiện các thay đổi (và kiểm tra chúng), bằng cách sử dụng
install -m 755 foo.sh ../bin/foo
; hoặc là
- sử dụng
Makefile
quy tắc để thực hiện kiểm tra cú pháp trước khi sao chép tệp nguồn từ $HOME/source
vào$HOME/bin
Chú thích: một module shell script là chỉ có thể sử dụng bởi một shell script, và sửa đổi bối cảnh nội bộ của kịch bản đó bằng cách sử dụng .
hoặc source
tích hợp các lệnh. Điều này khác với một tập lệnh thực thi, mà (giống như bất kỳ chương trình nào) chạy như một quy trình riêng biệt và không thể sửa đổi quy trình mẹ của nó. Như một quy ước thô, các mô-đun đi vào trong /usr/lib/name_of_program/name_of_module.sh
khi các lệnh đi vào /usr/bin/name_of_command
(không có bất kỳ hậu tố nào).