$ घर / बिन dir $ PATH पर नहीं है


11

मेरे ~/.profileपास एक अंतिम ब्लॉक है जो मेरे व्यक्तिगत bin/ directoryको इस तरह लोड करना चाहिए :

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

लेकिन ऐसा प्रतीत होता है कि लोड नहीं किया गया है:

echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

यह काम क्यों नहीं कर रहा है? (मेरा खोल बैश है।)

टाइगर के लिए संपादित करें

echo $0 => bash

echo $HOME => /home/student

whoami => student

less /etc/*-release => 
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

इस भाग की पृष्ठभूमि के लिए .profile, askubuntu.com/questions/284640 देखें ।
JdeBP

यह कौन सा खोल है?
njsg

2
मुझे लगता है कि निर्देशिका मौजूद है, है ना?
हराया

@njsg यह बैश है

संभवतः कुछ और इसके चलने के बाद आपके PATH चर को रीसेट कर रहा है। आप -xबैश करने के लिए पारित ध्वज का उपयोग करके सत्यापित कर सकते हैं और देख सकते हैं कि पीएटीएच रीसेट कहाँ है। इसके अलावा, आपको export PATH="$HOME/bin:$PATH"इसे बाद की प्रक्रियाओं को प्रदान करने की आवश्यकता है।
चार्ल्स अदीस

जवाबों:


10

ऊपर से ~/.profile:

# ~/.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.

इसलिए (यदि आप bashअपने शेल के रूप में उपयोग कर रहे हैं ) मैं ~/.bash_profileया तो अनुमान लगा रहा हूं या ~/.bash_loginआपके सिस्टम पर है। एक का चयन करें और इसे शामिल करने के लिए संपादित करें:

export PATH=$PATH:$HOME/bin

फिर सहेजें और source ~/.bash_loginलॉगआउट करें और वापस लॉग इन करें।

संपादित करें :

आप कहते हैं कि दोनों ~/.bash_profileऔर ~/.bash_loginआपके दोनों गायब हैं $HOME। मुझे लगता है कि हमें कुछ चीजों की पुष्टि करने की आवश्यकता है। कृपया अपने मूल प्रश्न में निम्नलिखित के परिणाम पोस्ट करें:

echo $0
echo $HOME
whoami
less /etc/*-release

2 संपादित करें :

व्यक्तिगत रूप से, मुझे नहीं पता कि ~/.profileप्रदान की गई जानकारी और प्रलेखन के आधार पर आपके मामले में शामिल क्यों नहीं किया जा रहा है। परीक्षण करते समय मैंने नोटिस किया कि मेरा ~/.profileस्कैन तब किया जाता है, जब मैं sshनया टर्मिनल लॉन्च करता हूं , लेकिन नहीं।

लेकिन, $HOME/binआपके इंटरेक्टिव शेल में शामिल होने की अनुमति देने के लिए एक सरल उपाय है । संपादित करें (यदि मौजूद नहीं है तो बनाएं) ~/.bashrcऔर उसमें निम्न पंक्ति जोड़ें:

export PATH=$PATH:$HOME/bin

सहेजें, लॉगआउट करें और वापस लॉग इन करें, या source ~/.bashrc

यह exportजाँचने के लिए कि $HOME/binक्या आप के साथ मौजूद हैं, लाइन का विस्तार किया जा सकता है :

if [ -d "$HOME/bin" ]
then
    export PATH=$PATH:$HOME/bin
fi

~/.bashrcएक और फाइल के बजाय क्यों ? व्यक्तिगत रूप से वरीयता और अधिक विश्वसनीय भी लगती है।


यद्यपि, चूंकि प्रश्नकर्ता ने यह निर्दिष्ट नहीं किया है कि कौन सा शेल है, इसलिए यह भी संभावना है कि कोई बॉर्न अगेन शेल का उपयोग नहीं कर रहा है। निश्चित रूप से इसी प्रश्न वाले अन्य लोग नहीं हो सकते हैं।
JdeBP

@JdeBP: उत्तर देने के लिए स्पष्टीकरण जोड़ा गया। एक डेबियन उपयोगकर्ता के रूप में माना जाता है कि उन्होंने अपना डिफ़ॉल्ट इंटरैक्टिव शेल नहीं बदला था, लेकिन मुझे लगता है कि वे हो सकते हैं।
टाइगर

मुझे अपने लिए कोई जरूरत नहीं है ~/.bash_profileऔर न ही ~/.bash_login। मेरे ~स्थान पर केवल .bash_historyऔर .bash_logout(और निश्चित रूप से .profile) हैं।

@ टाइगर अपडेट किया गया!

@student: एक और अपडेट किया गया। वास्तव में नुकसान के रूप में क्या चल रहा है। सुनने के लिए बहुत दिलचस्पी है कि क्या आपको पता है कि क्यों ~/.profileछोड़ दिया जा रहा है।
टाइगर

6

के लिए इन-सोर्सिंग खोल स्टार्टअप फ़ाइलों जटिल हैं नियम । यह संभव है कि आपके सेटअप के साथ, .profileजब आप एक एक्स सत्र के भीतर एक नया टर्मिनल खोलते हैं, तो इसमें शामिल नहीं हो रहे हैं ( echo .profileअंदर डालने की कोशिश करें .profileऔर देखें कि क्या आप खोलना शुरू करते समय संदेश दिखाते हैं)।

.  "$HOME/.profile"

प्रोफ़ाइल को मैन्युअल रूप से पुनः लोड करना चाहिए।

X के अंदर और बाहर प्रवेश .profileकरने के कारण भी लोड होना चाहिए ।

वैकल्पिक रूप से, आप यह सुनिश्चित कर सकते हैं . $HOME/.profileकि .bashrc(जब दोहरे परिवर्तन को रोकने के लिए एक चर-आधारित गार्ड का उपयोग कर रहे हों) सुनिश्चित करें कि .profileजब भी आप एक शेल शुरू करते हैं, तो हमेशा शामिल होता है।

(आप की जरूरत नहीं होनी चाहिए export PATHके रूप में PATHपहले से ही निर्यात किया चर रहा है और इसके मूल्य को संशोधित करने के अपने परिवर्तन नहीं होगा exportस्थिति।)


.bashrc से सोर्सिंग .profile अधिकांश मामलों में .profile `शामिल हैं। .bashrc`, यह एक अनंत लूप नहीं ले जाएगा?
योना

@ मुझे लगता है कि मैं दोनों कर रहा हूं और इसमें गार्ड्स ( [ -z "$has___profile" ] || return; has__profile=1) का उपयोग कर रहा हूं ताकि मुझे कोई अनंत लूप न मिले और दोनों ( .profileऔर .bashrcअगर केवल BASH_VERSION को परिभाषित किया गया है) तो कोई बात नहीं कि मुझे वहां कैसे मिला।
PSkocik

मैं समझ गया ! इस खराब सवाल को पूछने के लिए मेरी खराब अंग्रेजी ने मुझे धक्का दिया, (स्पष्टीकरण के लिए कोड डालना शाब्दिक अभिव्यक्ति से बेहतर है)। आपके समय के लिए धन्यवाद :-)
योना

एक साधारण bash -lलोड होगा .profile(जब तक कि कुछ विषम कॉन्फ़िगरेशन नहीं)। इसके अलावा, जब उपयोगकर्ता लॉग इन करता है, तो PATH को सही ढंग से सेट किया जाना चाहिए। इसका मतलब है कि "डिस्प्ले मैनेजर" (dm) उपयोग में है: gnome, KDE, xfce, lxde, आदि
इसहाक

1

यदि आप .profileसभी को लोड करना चाहते हैं, तो आपको लॉगिन शेल शुरू करना है:

$ bash -l

यह एक सत्र चलाने के लिए पर्याप्त होना चाहिए। आप PATH की तुलना पहले और बाद में कर सकते हैं लॉगिन बैश में अंतर की पुष्टि करने के लिए शुरू किया गया है।

अधिक स्थायी समाधान के लिए आपको चाहिए कि आपके टर्मिनल (कंसोल) शुरू होने से पहले कुछ बिंदु पर एक लॉगिन शेल शुरू किया जाए। विशिष्ट उपयोगकर्ता के रूप में लॉगिन कुछ dm (डिस्प्ले मैनेजर) (सूक्ति, केडी, xfce, lxde, आदि) पर होता है। अपनी आवश्यकताओं को पूरा करने के लिए पर्यावरण चर PATH को बदलना उनमें से किसी का काम होना चाहिए।

उदाहरण के लिए, xfce के लिए, समाधान बदलना है xinitrc:

$ cat >"$HOME/.config/xfce4/xinitrc" <<-\_EOT_
#!/bin/sh

# Ensure programs in ~/bin are available for the X session.
p="$HOME/bin";
[ "$p" != "${PATH%%:*}" ] && export PATH=$p:$PATH
_EOT_
cat "/etc/xdg/xfce4/xinitrc" | tail -n+2 >> "$HOME/.config/xfce4/xinitrc"

सूक्ति के लिए, ऐसा लगता है कि फ़ाइल को बदलना है ~/.pam_environment

और केडीई के लिए, इस गाइड का पालन करें , फ़ाइल बनाने के लिए, आप इस कोड का उपयोग कर सकते हैं:

$ file='$HOME/.config/plasma-workspace/env/path.sh'
$ code='export PATH=$HOME/bin:$PATH'
$ echo "$code" >> "$file"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.