cd
นอกจากจะเป็น shell builtin แล้วจริงๆแล้วก็เป็นโปรแกรมบนระบบปฏิบัติการที่รองรับ POSIX พวกเขาจะต้องให้อิสระ executables cd
สาธารณูปโภคปกติเช่น นี่คือตัวอย่างเช่นกรณีที่มีSolaris , AIX , HP-UX และOS X
เห็นได้ชัดว่า builtin cd
ยังคงมีผลบังคับใช้เนื่องจากการใช้งานภายนอกไม่เปลี่ยนแปลงไดเรกทอรีเชลล์ปัจจุบัน อย่างไรก็ตามหลังยังคงมีประโยชน์ นี่คือตัวอย่างที่แสดงให้เห็นว่า POSIX มองเห็นวิธีการใช้cd
คำสั่งนี้ได้อย่างไร:
find . -type d -exec cd {} \;
ในระบบ POSIX oneliner นี้จะรายงานข้อผิดพลาดสำหรับไดเรกทอรีทั้งหมดที่คุณไม่ได้รับอนุญาตcd
ในการแจกจ่าย Gnu / Linux ส่วนใหญ่จะล้มเหลวพร้อมกับข้อความแสดงข้อผิดพลาดว่า:
find: `cd': No such file or directory
และนี่คือคำตอบสำหรับคำถามของคุณ " เหตุใดซีดีจึงไม่ใช่โปรแกรม " โดยหนึ่งในผู้เขียนร่วม Unix ดั้งเดิม ในการดำเนินการ Unix ต้นcd
(สะกดคำchdir
ในเวลานั้น) เป็นโปรแกรมภายนอก มันเพิ่งหยุดทำงานโดยไม่คาดคิดหลังจากfork
มีการใช้งานครั้งแรก
การอ้างอิงเดนนิสริตชี่ :
ท่ามกลางความปีติยินดีของเราพบว่าคำสั่ง chdir (เปลี่ยนไดเรกทอรีปัจจุบัน) หยุดทำงาน มีการอ่านรหัสมากและวิปัสสนากังวลเกี่ยวกับวิธีการเพิ่มของส้อมอาจทำให้สาย chdir แตกได้ ในที่สุดความจริงก็เริ่มขึ้น: ในระบบเก่า chdir เป็นคำสั่งธรรมดา; ปรับไดเรกทอรีปัจจุบันของกระบวนการ (เฉพาะ) ที่แนบกับเทอร์มินัล ภายใต้ระบบใหม่คำสั่ง chdir เปลี่ยนไดเรกทอรีปัจจุบันของกระบวนการที่สร้างขึ้นเพื่อดำเนินการอย่างถูกต้อง แต่กระบวนการนี้สิ้นสุดลงทันทีและไม่มีผลใด ๆ บนเปลือกหลักของมัน! มันจำเป็นที่จะต้องทำให้ chdir เป็นคำสั่งพิเศษ, ดำเนินการภายในเชลล์ ปรากฎว่าฟังก์ชั่นคล้ายคำสั่งหลายอย่างมีคุณสมบัติเหมือนกันตัวอย่างเช่นการเข้าสู่ระบบ
ที่มา: Dennis M. Ritchie,“ วิวัฒนาการของระบบการแบ่งปันเวลา Unix ”, AT&T Bell Laboratories วารสารเทคนิค 63 (6), ส่วนที่ 2, ตุลาคม 2527, pp.1577-93
สถานะหน้าคู่มือ chdir ของ Unix รุ่น 1 (มีนาคม 1971) :
เนื่องจากกระบวนการใหม่ถูกสร้างขึ้นเพื่อดำเนินการแต่ละคำสั่ง chdir จะไม่ได้ผลถ้ามันถูกเขียนเป็นคำสั่งปกติ ดังนั้นจึงเป็นที่รู้จักและดำเนินการโดยเชลล์