~ / .Profile फ़ाइल में सही पथ सेटिंग


11

~/.profileजिसमें एक लाइन है

PATH="$HOME/bin:$HOME/.local/bin:$PATH"i

मैं आखिरी के बारे में निश्चित नहीं हूं i

  • क्या मुझे इसे हटा देना चाहिए ??
  • यह एक वाक्यविन्यास त्रुटि नहीं है ??


4
@ डेज़र्ट मुझे यकीन नहीं है कि यह एक डुप्लिकेट है। मैं मानता हूं कि दोनों $PATHपर्यावरण चर के बारे में हैं, लेकिन वे डुप्लिकेट नहीं हैं। अधिक से अधिक, वे संबंधित हैं। यह प्रश्न एक ऐसा मुद्दा है ~/.profileजिसमें सिर्फ उस पंक्ति में एक अतिरिक्त चरित्र होना होता है जहां $PATHपर्यावरण को सौंपा गया है।
दान

@ डैन ने डुप्लीकेट सवाल का सबसे ज्यादा वोट किया (!) उत्तर बताता है कि कैसे एक PATH=लाइन ~/.profileको वैध की तरह दिखना चाहिए - जो यहाँ असली सवाल है।
मिठाई

1
@dessert यहाँ ओपी है जो पूरी तरह से वैध है, यह एक अमान्य प्रारूप की समस्या नहीं है। यह काम करता है, यह सिर्फ उपयोगी कुछ भी नहीं करता है।
टेराडॉन

2
हां मैं vi संपादक का उपयोग करता हूं। संभवतः मैंने गलती से 'i' फ़ाइल में डाल दिया जैसे कि मिठाई ने कहा। लेकिन फिर मुझे इसे प्रभावी बनाने के लिए: wq करना पड़ा। मुझे लगता है कि मैंने ऐसा नहीं किया, लेकिन अपने स्तर को देखते हुए मैंने कुछ बेवकूफी भरी हरकत की।
मुस्कुराओ

जवाबों:


13

नहीं, यह सिंटैक्स त्रुटि नहीं है; यह केवल एक पत्र है, जिसे विस्तार के बाद जोड़ा जाता है $PATH, क्योंकि शेल उद्धरण हटाता है ...

$ PATH="$HOME/bin:$HOME/.local/bin:$PATH"i
$ echo $PATH
/home/zanna/bin:/home/zanna/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bini

इसलिए, साथ ही स्थानीय निर्देशिकाओं को प्रस्तुत करने /snap/binसे , इसने मेरे पेट से मौजूदा को प्रभावी ढंग से हटा दिया है , और गैर-अस्तित्व को जोड़ा है /snap/bini

आप iअपने पैट की मरम्मत के लिए हटा सकते हैं ।

परिवर्तन को देखने के लिए, आपको अपने source ~/.profileद्वारा उपयोग किए जा रहे किसी भी शेल में लॉग आउट या बैक या रन करना होगा (या शेल को लॉन्च करें bash -l), क्योंकि लॉगिन शेल.profile द्वारा ही पढ़ा जाता है ।

यदि आपने अपने .profileआप में यह परिवर्तन नहीं किया है , तो आप डिफ़ॉल्ट फ़ाइल को चलाकर पुनर्स्थापित करना चाह सकते हैं

mv ~/.profile{,.old}
cp /etc/skel/.profile ~/.profile

यह पुराने का नाम बदल देता है .profile .profile.old(यदि आप चाहते थे तो आप फ़ाइल को हटा भी सकते हैं) और इसे आपके सिस्टम के लिए डिफ़ॉल्ट संस्करण से बदल देता है /etc/skel


5

मुझे लगता है कि यहाँ स्पष्ट नहीं है कि निम्नलिखित अभिव्यक्ति का क्या अर्थ है:

PATH="$HOME/bin:$HOME/.local/bin:$PATH"i

पहले भाग का PATH=मतलब है कि हम (पर्यावरण) चर के लिए एक नया मान प्रदान करते हैं $PATH

दूसरा भाग उस चर का नया मूल्य है। वर्तमान मामले में चर $HOMEको उसके वर्तमान मूल्य के साथ विस्तारित किया जाएगा और उस मूल्य को स्ट्रिंग में जोड़ा जाएगा /bin:। वही स्ट्रिंग के अगले भाग के लिए जाता है $HOME/.local/bin:। अंत में $PATHचर के वर्तमान (पिछले) मूल्य का विस्तार और संलग्न किया जाएगा। बृहदान्त्र अभिव्यक्ति :में सीमांकक की भूमिका निभाता है PATH

लक्ष्य अंततः लिखना है PATH=<some additional paths>+<the the current value of $PATH>:। हम इन अतिरिक्त रास्तों को स्ट्रिंग के सामने रखते हैं, क्योंकि हम चाहते हैं कि शेल इन स्थानों पर पहले निष्पादन योग्य के लिए खोज करे और उसके बाद ही सिस्टम चौड़ा हो।

चरित्र iअनावश्यक है। यह नए मूल्य के लिए जोड़ा $PATHजाएगा और एक गड़बड़ कर देगा, जैसा कि @Zanna उसके जवाब में बताते हैं ।


5

हां यह एक सिंटैक्स त्रुटि है, वास्तविक .profileको इस तरह दिखना चाहिए जब तक कि आप चीजों को बदल नहीं देते (यह 17.10 संस्करण है, इसके बारे में नोट्स देखें:

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

यह उबंटू के पुराने संस्करणों में भिन्न हो सकता है, जहां उपयोगकर्ता binनिर्देशिका मौजूद होने पर जांच को इसमें शामिल नहीं किया गया था .profile। यह देखने के लिए सबसे आसान तरीका है कि यह कैसा दिखना चाहिए /etc/skel/.profile

इसलिए जैसा कि आपने अपनी टिप्पणी में पूछा है, इसे जोड़ने के लिए बस अपनी प्रोफ़ाइल फ़ाइल के अंत में रखें:

# Manual addition for swift development snapshot
export PATH="$PATH:/home/jeremy/swift-4.0-DEVELOPMENT-SNAPSHOT-2017-06-29-a-ubuntu16.04/usr/bin"

यदि आप कभी भी अपनी प्रोफ़ाइल को पूरी तरह से गड़बड़ करते हैं, तो एक प्रति है जहां आप एक नया प्राप्त कर सकते हैं /etc/skel/


1
मेरे पास एक अतिरिक्त पंक्ति है "निर्यात पथ = $ पथ: /home/jeremy/swift-4.0-DEVELOPMENT-SNAPSHOT-2017-06-29-a-ubuntu16.04/usr/bin/ क्योंकि मैंने इसे स्थापित किया है। यह ठीक है??
मुस्कुराओ

3
यह रेखा ठीक है, मैंने इसे अपने उदाहरण में शामिल किया कि यह दिखाया जाए कि इसे कहां रखा जाए।
विदेहोनथ

1
कृपया ध्यान दें कि /etc/skel/.profile16.04 में अलग-अलग दिखता है, एक परीक्षण के बिना कि क्या "$HOME/bin"मौजूद है। यहां तक ​​कि अगर यह एक बेहतर संस्करण (आईएमओ) था, तो यह 17.10 में वापस बदल दिया गया लगता है - एक कारण या गलती से।
गुन्नार हेजलमरसन

@GunnarHjalmarsson ध्यान दें कि मेरे पोस्ट में, और हाँ यह 17.10 से स्किल / .प्रोफ़ाइल है जो मैं चला रहा हूँ।
वीडियोनौथ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.