เห็นได้ชัดว่ามีความแตกต่างบางประการระหว่างไฟล์ปฏิบัติการในbin
ไดเรกทอรีและไฟล์ "ซอร์ส" ที่แก้ไขได้
- สำหรับไฟล์ต้นฉบับจะมีประโยชน์ที่จะมีคำต่อท้ายเพื่อให้คุณสามารถเห็นสิ่งที่เป็นและเพื่อช่วยให้เครื่องมือที่ชาญฉลาดน้อยลงที่ไม่สามารถสแกน
#!
บรรทัด
- สำหรับโมดูลที่พวกเขากำลังใช้โดยเฉพาะชุดที่เกี่ยวข้องของโปรแกรมทั้งหมดที่ใช้ล่ามเดียวกัน (หรือไม่มีล่าม) และมันก็เป็นธรรมดาที่จะรวม
.pm
, .sh
หรือ.so
ในกรณีดังกล่าว
- สำหรับโปรแกรมที่ปฏิบัติการได้ชื่อของมันเป็นส่วนหนึ่งของ "สัญญาการเขียนโปรแกรม" ซึ่งผู้ใช้และสคริปต์อื่นเรียกใช้ มันเป็นสิ่งสำคัญที่ชื่อจะไม่เปลี่ยนแปลงแม้ว่าการดำเนินการจะ; ดังนั้นชื่อไฟล์จึงไม่ควรมีคำต่อท้าย
ในกรณีของโปรแกรมที่คอมไพล์ความแตกต่างระหว่าง "source" และ "executable" จะเห็นได้ชัด: หนึ่งประกอบด้วยซอร์สโค้ดส่วนอีกอันประกอบด้วยภาษาของเครื่องหรือ bytecode ตีความ ในกรณีของสคริปต์ไม่มีความแตกต่างที่เห็นได้ชัด แต่make
คำสั่งรักษาการแยกแบบ notional ระหว่าง "ซอร์สโค้ดสำหรับสคริปต์" และ "เวอร์ชันปฏิบัติการของสคริปต์": "คอมไพเลอร์" เริ่มต้นสำหรับ "เชลล์สคริปต์" เป็นเพียงcp
.
ฉันขอแนะนำให้เก็บ$HOME/source
ไดเรกทอรีแยกต่างหากและ:
- การเก็บ symlink เช่นทำโดย
ln -s ../source/foo.sh $HOME/bin/foo
; หรือ
- คัดลอกด้วยตนเองหลังจากทำการเปลี่ยนแปลง (และทดสอบ) โดยใช้
install -m 755 foo.sh ../bin/foo
; หรือ
- ใช้
Makefile
กฎเพื่อทำการตรวจสอบไวยากรณ์ก่อนที่จะคัดลอกไฟล์ต้นฉบับจาก$HOME/source
ลงใน$HOME/bin
เชิงอรรถ: โมดูลเชลล์สคริปต์สามารถใช้งานได้โดยเชลล์สคริปต์อื่นเท่านั้นและแก้ไขบริบทภายในของสคริปต์นั้นโดยใช้คำสั่ง.
หรือsource
บิวด์อิน สิ่งนี้แตกต่างจากสคริปต์ที่เรียกใช้งานได้ซึ่ง (เช่นโปรแกรมใด ๆ ) ทำงานเป็นกระบวนการแยกต่างหากและไม่สามารถแก้ไขกระบวนการหลักได้ ตามแบบแผนคร่าวๆโมดูลจะเข้าไปใน/usr/lib/name_of_program/name_of_module.sh
ขณะที่คำสั่งเข้าไป/usr/bin/name_of_command
(โดยไม่มีคำต่อท้าย)