मैं, एक लिनक्स कमांड का सामना करना पड़ा builtin cd
।
आज्ञाओं builtin cd
और के बीच अंतर क्या है cd
?
वास्तव में, मैंने अंतर के बारे में कुछ शोध किए, लेकिन मुझे इस बारे में एक उल्लेखनीय और महत्वपूर्ण स्पष्टीकरण नहीं मिला।
मैं, एक लिनक्स कमांड का सामना करना पड़ा builtin cd
।
आज्ञाओं builtin cd
और के बीच अंतर क्या है cd
?
वास्तव में, मैंने अंतर के बारे में कुछ शोध किए, लेकिन मुझे इस बारे में एक उल्लेखनीय और महत्वपूर्ण स्पष्टीकरण नहीं मिला।
जवाबों:
cd
आदेश, एक अंतर्निहित है, इसलिए सामान्य रूप से builtin cd
के रूप में ही काम करेंगे cd
। लेकिन cd
फ़ंक्शन या उपनाम के रूप में पुनर्परिभाषित किए जाने पर एक अंतर होता है, जिस स्थिति cd
में फ़ंक्शन / उपनाम को कॉल करेगा लेकिन builtin cd
फिर भी निर्देशिका को बदल देगा (दूसरे शब्दों में, फ़ंक्शन द्वारा clobbered होने पर भी अंतर्निहित सुलभ रखेगा।)
उदाहरण के लिए:
user:~$ cd () { echo "I won't let you change directories"; }
user:~$ cd mysubdir
I won't let you change directories
user:~$ builtin cd mysubdir
user:~/mysubdir$ unset -f cd # undefine function
या एक उपनाम के साथ:
user:~$ alias cd='echo Trying to cd to'
user:~$ cd mysubdir
Trying to cd to mysubdir
user:~$ builtin cd mysubdir
user:~/mysubdir$ unalias cd # undefine alias
का उपयोग करना builtin
भी एक cd
फ़ंक्शन को परिभाषित करने का एक अच्छा तरीका है जो कुछ करता है और निर्देशिका को बदलता है (क्योंकि cd
इसे कॉल करने से बस एक अंतहीन पुनरावृत्ति में फ़ंक्शन को कॉल करना जारी रहेगा।)
उदाहरण के लिए:
user:~ $ cd () { echo "Changing directory to ${1-home}"; builtin cd "$@"; }
user:~ $ cd mysubdir
Changing directory to mysubdir
user:~/mysubdir $ cd
Changing directory to home
user:~ $ unset -f cd # undefine function
builtin cd mysubdir
और \cd mysubdir
?
cd
, जो मामले \cd
में उपनाम को बायपास करेगा और फ़ंक्शन को चलाएगा। देखें stackoverflow.com/a/16506263/4518341
ज्यादातर उदाहरणों में, कोई अंतर नहीं है (लेकिन नीचे देखें)। cd
आदेश है एक अंतर्निहित सभी गोले में आदेश। इसे अंतर्निहित 1 के रूप में निर्मित करने की आवश्यकता है क्योंकि एक बाहरी कमांड आह्वान शेल के वातावरण को नहीं बदल सकता है, और कार्यशील निर्देशिका को बदलने से इसके वातावरण में बदलाव होता है।
bash
आदेश builtin
बलों खोल उपयोग करने के लिए निर्मित एक आदेश के संस्करण है, भले ही वहाँ एक खोल समारोह, उपनाम, या बाहरी कमांड ही नाम के साथ उपलब्ध हो सकता है।
इस मामले में जहां वहाँ में है नाम के साथ एक खोल समारोह जैसे cd
, तो builtin cd
हैं नहीं कि कहते हैं। का उपयोग करना builtin cd
है कि एक खोल समारोह या उपयोगकर्ता द्वारा उर्फ के माध्यम से जोड़ा गया हो सकता है किसी भी अतिभारित कार्यक्षमता बाइपास।
उदाहरण:
cd
बिल्ट-इन कमांड एक समारोह है कि शीघ्र अद्यतन करता है के द्वारा ओवरलोड हो गया है:
cd() {
builtin cd "$@" && PS1=$(__update_prompt)
}
जहां __update_prompt
कुछ अन्य उपयोगकर्ता-आपूर्ति फ़ंक्शन है जो एक स्ट्रिंग को आउटपुट करता है।
builtin cd
समारोह में समारोह रिकर्सिवली फोन नहीं होता। builtin cd
एक शेल में उपयोग करना जहां यह फ़ंक्शन सक्रिय है, इसके अतिरिक्त फ़ंक्शन को कॉल नहीं करेगा।
1 एक बाहरी cd
कमांड ( macOS और, मेरा मानना है, सोलारिस) के साथ यूनीस हैं । उस कमांड का उद्देश्य, जो शेल के लिए कार्य निर्देशिका को बदल नहीं सकता है, संभवतः POSIX मानक को संतुष्ट करने के लिए है, जो cd
कि उपलब्ध होने वाली बाहरी उपयोगिताओं में से एक के रूप में सूचीबद्ध करता है ( cd
जो "विशेष अंतर्निहित उपयोगिताओं" में से एक नहीं है) । यह देखने के लिए एक परीक्षण के रूप में भी काम कर सकता है कि किसी दिए गए निर्देशिका के लिए कार्य निर्देशिका बदलना संभव है या नहीं ।
cd
कमान के साथ ओएस की श्रेणी में आते हैं ।