"$ पेट" और "~ / बिन" क्या हैं? मेरे पास व्यक्तिगत स्क्रिप्ट कैसे हो सकती हैं?


29

क्या है $PATH?

मेरे पास कमांड / प्रोग्राम कैसे हो सकते हैं जो केवल मेरे लिए उपलब्ध हैं?
मैंने इस पथ को ~/binपहले उल्लेख किया है, लेकिन इसका उपयोग किस लिए किया जाता है, और मैं इसका उपयोग कैसे करूं?


मैं कुछ प्रयोग कर रहा हूं क्योंकि यह "वास्तविक प्रश्न" की तुलना में अधिक FAQ या विकि सामग्री है। यह संकेत दिया गया था क्योंकि मैंने पिछले जवाब पर (दाईं ओर लिंक किए गए साइडबार में) ~ और बिन का उल्लेख किया था और किसी ने इस पर टिप्पणी की कि इसे कैसे जोड़ा जाए: अब संक्षिप्त टिप्पणियों के बजाय, हम इस पोस्ट से लिंक कर सकते हैं जब ~ / बिन है उल्लेख किया।

जवाबों:


26

$ 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  ...

3
उपयोग करते समय देखने वाली एक बात यह है कि यह केवल कमांड्स को खोजेगा जो कि फाइलसिस्टम में बायनेरिज़ हैं, यह शेल बिलिन, अलायस या फ़ंक्शंस की रिपोर्ट नहीं करता है। अक्सर, यह typeदेखने के लिए उपयोग करना अधिक उपयोगी होता है कि शेल द्वारा वास्तविक कमांड कैसे हल किया जाएगा; उदा: which echoऔर type echoविभिन्न चीजों की रिपोर्ट करेगा, which'/ bin / echo' लौटाता है , लेकिन 'type' रिटर्न देता है कि यह शेल बिल्डिन है, जो शेल '/ bin' में फाइल के ऊपर पसंद करेगा।
स्टीव बीट्टी

@ बीट्टी, +1। whichबेहतर तरीके से typeया commandइंटरैक्टिव गोले में बदल दिया गया है , और यह लिपियों में पूरी तरह से बेकार है।
जिरह 22

एक बात ध्यान दें कि मैंने अभी देखा है - किसी कारणवश $HOMEपरिवर्तनशील $PATHनहीं है, अर्थात किसी को ~इसके बजाय साइन का उपयोग करना होगा।
हाई-एंजेल

19

के बारे में ~/binऔर केवल अपने उपयोगकर्ता के लिए उपलब्ध आदेशों / कार्यक्रमों

हाल के उबंटू संस्करणों में ~/binनिर्देशिका शामिल है आपके $PATH, लेकिन केवल अगर ~/binनिर्देशिका मौजूद है।

यदि यह मौजूद नहीं है:

  1. सुनिश्चित करें कि आपके पास ~/.profileनिम्नलिखित श्लोक हैं (डिफ़ॉल्ट ~/.profileपहले से ही है):

    # set PATH so it includes user's private bin if it exists
    if [ -d "$HOME/bin" ] ; then
        PATH="$HOME/bin:$PATH"
    fi
    
  2. ~/binनिर्देशिका बनाएँ :

    mkdir -p ~/bin
    
  3. या तो अपने कंप्यूटर को रिबूट करें, या फिर से पढ़ने के लिए बैश करने के लिए मजबूर करें ~/.profile:

    exec -l bash
    

"रिबूट या exec -l bash" टिप के लिए धन्यवाद । -lझंडा क्या करता है? मुझे इसमें कोई स्पष्टीकरण नहीं मिल रहा है man exec
evanrmurphy

3
exec -lलॉगिन शेल [ wiki.bash-hackers.org/commands/builtin/exec] के रूप में बैश निष्पादित करेगा । संक्षेप में, यह बैश को फिर से पढ़ने /etc/profileऔर करने के लिए मजबूर करता है ~/.profile। सिर्फ दौड़ने exec bashसे ही फिर से पढ़ना होगा ~/.bashrc
डेनिलो पियाज़ालुंगा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.