ฉันสับสนเกี่ยวกับการอนุญาตให้ใช้ไฟล์ไม่ทำงานตามที่คาดไว้ อาจเป็นเพราะความคาดหวังของฉันผิด อย่างไรก็ตาม:
ฉันมีไฟล์สคริปต์สำหรับความเรียบง่ายที่เรียกว่าเพียงแค่ตั้งอยู่ในs ~/binเพื่อประโยชน์ของตัวอย่างนี้ไฟล์มีเพียงบรรทัดต่อไปนี้:
#!/bin/zsh
echo "Test";
ง่ายมาก.
ฉันนำทางไปยัง~/binไดเรกทอรีและchmodสิทธิ์ของแฟ้มของsการ400- คืออ่านอย่างเดียวสำหรับฉันเท่านั้น ไม่มีสิทธิ์ดำเนินการ ดังนั้นฉันจึงพยายามรันสคริปต์โดยป้อนเส้นทางของสิ่งนี้:
% ./s
zsh: permission denied: ./s
จนถึงตอนนี้ดีมาก ไม่สามารถเรียกใช้ไฟล์ได้เนื่องจากการอนุญาตที่ไม่ถูกต้อง การกำหนดสิทธิ์การเข้าถึงให้เกิน500(เรียกใช้การอนุญาตที่ได้รับ) จะทำงานได้ดีเช่นกัน - ด้วยการอนุญาตเหล่านี้ไฟล์จะทำงานได้ดี:
% ./s
Test
ทั้งหมดนี้เป็นไปตามที่คาดไว้ แต่ฉันก็chmodอนุญาตให้ย้อนกลับไปที่400(ดำเนินการอนุญาตอีกครั้ง) ลองsourceใช้ไฟล์และสิ่งนี้เกิดขึ้น:
% source s
Test
แม้ว่าสิทธิ์จะเป็น 400สคริปต์จะดำเนินการ
ดังนั้นนี่คือคำถามของฉัน: เหตุใดจึง./sล้มเหลว (เช่นควร) แต่source sดำเนินการตามปกติ สิ่งนี้ไม่ได้เป็นการทำลายวัตถุประสงค์ทั้งหมดของการอนุญาตให้ดำเนินการหรือไม่
ใน400สิทธิ์sh sและzsh sยังทำงาน
ฉันแน่ใจว่าฉันกำลังทำหรือเข้าใจบางสิ่งผิดปกติอย่างน่ากลัว สามารถชี้คนออกที่ให้ฉันและอธิบายความแตกต่างระหว่าง./s, source s, sh sและzsh s?