Linux: Видаліть зайві шляхи зі змінної $ PATH
Linux From Scratch має цю функцію в / etc / profile
# 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
кш. Я сумніваюся, що він буде працювати в командній оболонці Windows або в Powershell.
Якщо у вас є Python, наступна команда повинна виконувати те, що прямо запитується (тобто видалити зайві шляхи):
$ 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)))
" )