เมื่อคุณแหล่งเชลล์สคริปต์บรรทัดshebangจะถูกละเว้น ด้วยการใส่ Shebang ที่ไม่ถูกต้องคุณสามารถแจ้งเตือนผู้ใช้ว่าสคริปต์ทำงานผิดพลาด:
#!/bin/bash source-this-script
# ...
ข้อความแสดงข้อผิดพลาดจะเป็นดังนี้:
/bin/bash: source-this-script: No such file or directory
ชื่ออาร์กิวเมนต์ (ตามอำเภอใจ) ให้คำใบ้ไว้แล้ว แต่ข้อความแสดงข้อผิดพลาดยังไม่ชัดเจน 100% เราสามารถแก้ไขได้ด้วยสคริปต์อรรถประโยชน์source-this-script
ที่วางไว้ในที่ของคุณPATH
:
#!/bin/sh
echo >&2 "This script must be sourced, not executed${1:+: }${1:-!}"
exit 1
ตอนนี้ข้อความแสดงข้อผิดพลาดจะเป็นดังนี้:
This script must be sourced, not executed: path/to/script.sh
เปรียบเทียบกับแนวทางอื่น ๆ
เมื่อเทียบกับคำตอบอื่น ๆ วิธีการนี้ต้องการการเปลี่ยนแปลงเพียงเล็กน้อยกับแต่ละสคริปต์ (และการมีบรรทัด shebang ช่วยด้วยการตรวจจับชนิดไฟล์ในเครื่องมือแก้ไขและระบุภาษาสคริปต์เชลล์ดังนั้นจึงมีประโยชน์มาก) ข้อเสียคือข้อความแสดงข้อผิดพลาดค่อนข้างชัดเจนหรือการเพิ่ม (ครั้งเดียว) ของเชลล์สคริปต์อื่น
มันไม่ได้ป้องกันการร้องขออย่างชัดเจนผ่านทางbash path/to/script.sh
(ขอบคุณ @muru!)
x
ซึ่งเพิ่งมีคำสั่ง. your-script-to-be-sourced
มันก็โอเค แต่ถ้าเขาต้องการที่จะรันbash your-script-to-be-sourced
มันควรจะถูกห้าม? ประเด็นของข้อ จำกัด นี้คืออะไร?