क्या है $PATH?
मेरे पास कमांड / प्रोग्राम कैसे हो सकते हैं जो केवल मेरे लिए उपलब्ध हैं?
मैंने इस पथ को ~/binपहले उल्लेख किया है, लेकिन इसका उपयोग किस लिए किया जाता है, और मैं इसका उपयोग कैसे करूं?
क्या है $PATH?
मेरे पास कमांड / प्रोग्राम कैसे हो सकते हैं जो केवल मेरे लिए उपलब्ध हैं?
मैंने इस पथ को ~/binपहले उल्लेख किया है, लेकिन इसका उपयोग किस लिए किया जाता है, और मैं इसका उपयोग कैसे करूं?
जवाबों:
$ PATH एक वातावरण वैरिएबल है जिसका उपयोग कमांड देखने के लिए किया जाता है। ~ आपकी घर निर्देशिका है, इसलिए ~ / बिन होगा / घर / उपयोगकर्ता / बिन; यह एक सामान्य निर्देशिका है।
जब आप एक शेल में "एलएस" चलाते हैं, उदाहरण के लिए, आप वास्तव में / बिन / एलएस कार्यक्रम चलाते हैं; आपके सिस्टम कॉन्फ़िगरेशन के आधार पर सटीक स्थान भिन्न हो सकता है। ऐसा इसलिए होता है क्योंकि / बिन आपके $ पेट में होता है।
पथ को देखने और यह जानने के लिए कि कोई विशेष कमांड कहाँ स्थित है:
$ echo $PATH
/home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:...
$ which ls # searches $PATH for an executable named "ls"
/bin/ls
$ ls # runs /bin/ls
bin desktop documents downloads examples.desktop music pictures ...
$ /bin/ls # can also run directly
bin desktop documents downloads examples.desktop music pictures ...
अपनी निजी बिन निर्देशिका होने के लिए, आपको इसे केवल पथ में जोड़ना होगा। नीचे लाइनों को शामिल करने के लिए ~ / .profile (एक छिपी हुई फ़ाइल) को संपादित करके ऐसा करें। यदि लाइनों पर टिप्पणी की जाती है, तो आपको केवल उन्हें अनलॉक्ड करना होगा; अगर वे पहले से ही वहाँ हैं, तो आप सब तैयार हैं!
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ]; then
PATH="$HOME/bin:$PATH"
fi
अब आपको अपनी ~ / बिन निर्देशिका बनाने की आवश्यकता है और, क्योंकि .profile को लॉगिन पर चलाया जाता है और केवल ~ / बिन को जोड़ा जाता है यदि यह उस समय मौजूद है, तो आपको अपडेट किए गए पथ को देखने के लिए फिर से लॉगिन करने की आवश्यकता है।
आइए इसका परीक्षण करें:
$ ln -s $(which ls) ~/bin/my-ls # symlink
$ which my-ls
/home/user/bin/my-ls
$ my-ls -l ~/bin/my-ls
lrwxrwxrwx 1 user user 7 2010-10-27 18:56 my-ls -> /bin/ls
$ my-ls # lookup through $PATH
bin desktop documents downloads examples.desktop music pictures ...
$ ~/bin/my-ls # doesn't use $PATH to lookup
bin desktop documents downloads examples.desktop music pictures ...
typeदेखने के लिए उपयोग करना अधिक उपयोगी होता है कि शेल द्वारा वास्तविक कमांड कैसे हल किया जाएगा; उदा: which echoऔर type echoविभिन्न चीजों की रिपोर्ट करेगा, which'/ bin / echo' लौटाता है , लेकिन 'type' रिटर्न देता है कि यह शेल बिल्डिन है, जो शेल '/ bin' में फाइल के ऊपर पसंद करेगा।
whichबेहतर तरीके से typeया commandइंटरैक्टिव गोले में बदल दिया गया है , और यह लिपियों में पूरी तरह से बेकार है।
$HOMEपरिवर्तनशील $PATHनहीं है, अर्थात किसी को ~इसके बजाय साइन का उपयोग करना होगा।
के बारे में ~/binऔर केवल अपने उपयोगकर्ता के लिए उपलब्ध आदेशों / कार्यक्रमों
हाल के उबंटू संस्करणों में ~/binनिर्देशिका शामिल है आपके $PATH, लेकिन केवल अगर ~/binनिर्देशिका मौजूद है।
यदि यह मौजूद नहीं है:
सुनिश्चित करें कि आपके पास ~/.profileनिम्नलिखित श्लोक हैं (डिफ़ॉल्ट ~/.profileपहले से ही है):
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
~/binनिर्देशिका बनाएँ :
mkdir -p ~/bin
या तो अपने कंप्यूटर को रिबूट करें, या फिर से पढ़ने के लिए बैश करने के लिए मजबूर करें ~/.profile:
exec -l bash
exec -l bash" टिप के लिए धन्यवाद । -lझंडा क्या करता है? मुझे इसमें कोई स्पष्टीकरण नहीं मिल रहा है man exec।
exec -lलॉगिन शेल [ wiki.bash-hackers.org/commands/builtin/exec] के रूप में बैश निष्पादित करेगा । संक्षेप में, यह बैश को फिर से पढ़ने /etc/profileऔर करने के लिए मजबूर करता है ~/.profile। सिर्फ दौड़ने exec bashसे ही फिर से पढ़ना होगा ~/.bashrc।