लिनक्स: $ PATH चर से अनावश्यक रास्ते निकालें
लिनक्स स्क्रैच से इस समारोह में / etc / प्रोफाइल है
# Functions to help us manage paths. Second argument is the name of the
# path variable to be modified (default: PATH)
pathremove () {
local IFS=':'
local NEWPATH
local DIR
local PATHVARIABLE=${2:-PATH}
for DIR in ${!PATHVARIABLE} ; do
if [ "$DIR" != "$1" ] ; then
NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
fi
done
export $PATHVARIABLE="$NEWPATH"
}
इसका उद्देश्य पथ को जोड़ने के लिए इन कार्यों के साथ उपयोग किया जाना है, ताकि आप इसे अतिरेक से न करें:
pathprepend () {
pathremove $1 $2
local PATHVARIABLE=${2:-PATH}
export $PATHVARIABLE="$1${!PATHVARIABLE:+:${!PATHVARIABLE}}"
}
pathappend () {
pathremove $1 $2
local PATHVARIABLE=${2:-PATH}
export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}$1"
}
सरल उपयोग केवल pathremove
निर्देशिका पथ को निकालने के लिए देना है - लेकिन ध्यान रखें कि इसे ठीक से मेल खाना है:
$ pathremove /home/username/anaconda3/bin
यह उस निर्देशिका के प्रत्येक उदाहरण को आपके पथ से हटा देगा।
यदि आप अपने पथ में निर्देशिका चाहते हैं, लेकिन अतिरेक के बिना, आप अन्य कार्यों में से किसी एक का उपयोग कर सकते हैं, जैसे - किसी विशेष मामले के लिए:
$ pathprepend /usr/local/sbin
$ pathappend /usr/local/bin
$ pathappend /usr/sbin
$ pathappend /usr/bin
$ pathappend /sbin
$ pathappend /bin
$ pathappend /usr/games
लेकिन, जब तक पठनीयता चिंता का विषय नहीं है, इस बिंदु पर आप बेहतर काम कर रहे हैं:
$ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
क्या सभी गोले में उपरोक्त कार्य मनुष्य को ज्ञात होगा?
मैं में काम करने के लिए ऊपर अनुमान हैं sh
, dash
और bash
कम से कम। मैं इसमें काम नहीं करता है जानने के लिए आश्चर्यचकित हो जाएगा csh
, fish', or
ksh`। मुझे संदेह है कि यह विंडोज कमांड शेल या पॉवर्सशेल में काम करेगा।
यदि आपके पास पायथन है, तो निम्न प्रकार के कमांड को वही करना चाहिए जो सीधे पूछा जाता है (यानी, अनावश्यक रास्ते हटा दें):
$ PATH=$( python -c "
import os
path = os.environ['PATH'].split(':')
print(':'.join(sorted(set(path), key=path.index)))
" )
एक-लाइनर (बहुस्तरीय मुद्दों को दूर करने के लिए):
$ PATH=$( python -c "import os; path = os.environ['PATH'].split(':'); print(':'.join(sorted(set(path), key=path.index)))" )
उपरोक्त बाद में बेमानी रास्ते निकाल देता है। पहले के निरर्थक रास्तों को हटाने के लिए, एक उलटी सूची के सूचकांक का उपयोग करें और इसे फिर से उल्टा करें:
$ PATH=$( python -c "
import os
path = os.environ['PATH'].split(':')[::-1]
print(':'.join(sorted(set(path), key=path.index, reverse=True)))
" )