cd
शेल बिलिन होने के अलावा, वास्तव में POSIX अनुरूप ओएस पर एक कार्यक्रम भी है । उन्हें नियमित उपयोगिताओं के लिए स्वतंत्र निष्पादनयोग्य प्रदान करना चाहिए , जैसे cd
। यह उदाहरण के लिए Solaris , AIX , HP-UX और OS X के साथ मामला है ।
जाहिर है, एक बिल्डिन cd
अभी भी अनिवार्य है क्योंकि इसका बाहरी कार्यान्वयन वर्तमान शेल निर्देशिका को नहीं बदलता है। हालांकि, उत्तरार्द्ध अभी भी उपयोगी हो सकता है। यहाँ एक उदाहरण दिखाया गया है कि कैसे POSIX कल्पना करता है कि इस cd
कमांड का उपयोग कैसे किया जा सकता है:
find . -type d -exec cd {} \;
POSIX सिस्टम पर, यह ऑनलाइनर उन सभी निर्देशिकाओं के लिए एक त्रुटि संदेश की सूचना देगा, जिनमें आपको अनुमति नहीं cd
है। अधिकांश Gnu / Linux वितरण में, यह उस त्रुटि संदेश के साथ विफल रहता है:
find: `cd': No such file or directory
और यहाँ आपके प्रश्न का उत्तर है, " सीडी एक कार्यक्रम क्यों नहीं है? " मूल यूनिक्स के सह-लेखक द्वारा। बहुत प्रारंभिक यूनिक्स कार्यान्वयन पर, cd
( chdir
उस समय वर्तनी ) एक बाहरी कार्यक्रम था। यह fork
पहली बार लागू होने के बाद अप्रत्याशित रूप से काम करना बंद कर दिया ।
उद्धरण डेनिस रिची :
हमारे जुबली के बीच में, यह पता चला था कि chdir (वर्तमान धारा परिवर्तन) कमांड ने काम करना बंद कर दिया था। कोड के बारे में बहुत कुछ पढ़ा गया था और चिंताजनक आत्मनिरीक्षण किया गया था कि कैसे कांटा के अलावा chdir कॉल को तोड़ सकता है। अंत में सच्चाई सामने आई: पुरानी व्यवस्था में चदिर एक साधारण आदेश था; यह टर्मिनल से जुड़ी (अद्वितीय) प्रक्रिया की वर्तमान निर्देशिका को समायोजित करता है। नई प्रणाली के तहत, chdir कमांड ने इसे निष्पादित करने के लिए बनाई गई प्रक्रिया की वर्तमान निर्देशिका को सही ढंग से बदल दिया, लेकिन इस प्रक्रिया को तुरंत समाप्त कर दिया और इसका मूल शैल पर कोई प्रभाव नहीं पड़ा! शेल के भीतर आंतरिक रूप से निष्पादित चिरिर को एक विशेष कमांड बनाना आवश्यक था। यह पता चलता है कि कई कमांड जैसे कार्यों में समान संपत्ति होती है, उदाहरण के लिए लॉगिन।
स्रोत: डेनिस एम। रिची, " द इवोल्यूशन ऑफ़ द यूनिक्स टाइम-शेयरिंग सिस्टम ", एटी एंड टी बेल लेबोरेटरीज टेक्निकल जर्नल 63 (6), पार्ट 2, 1984 अक्टूबर, पीपी.1577-93
यूनिक्स संस्करण 1 (मार्च 1971) chdir मैनुअल पेज बताता है:
क्योंकि प्रत्येक कमांड को निष्पादित करने के लिए एक नई प्रक्रिया बनाई जाती है, यदि सामान्य कमांड के रूप में लिखा जाता है तो chdir अप्रभावी होगा। इसलिए इसे शेल द्वारा पहचाना और निष्पादित किया जाता है।