Как удалить путь из системного пути (`$ PATH`) с помощью команд терминала?

10

Я добавил путь к каталогу в системный путь ( $PATH), запустив,

export PATH=$PATH:/home/avinash/Desktop/raj

Теперь мой путь выглядит так,

$ echo $ PATH
/ USR / Библиотека / LightDM / LightDM: / USR / местные / SBIN: / USR / местные / бен: / USR / SBIN: / USR / бен: / SBIN: / бен: / USR / игры: / USR / местные / игры : / Главная / Авинаш / Desktop / Raj

Я хочу удалить /home/avinash/Desktop/rajиз системной переменной пути с помощью команды ( как команда экспорта делает при добавлении пути ).

Авинаш Радж
источник
куда вы положили экспортную выписку?
souravc
терминал гномов (ctrl + alt + t)
Авинаш Радж

Ответы:

14

Запуск export PATH=$PATH:/...не устанавливает вашу PATHсистему в целом. Это просто переменная оболочки. Запустите новую оболочку и BOOM , она исчезла. Очевидно, что если вы добавили это в ~/.bashrc(или другой файл начальной загрузки среды), вам придется отменить это изменение, но здесь это не похоже на вашу проблему.

Если вы отчаянно не хотите запускать новую оболочку, вы можете установить ее, удалив вручную, с помощью:

export PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Оли
источник
11

В вашей текущей оболочке (вашей текущей сессии gnome-терминала) вы можете сделать это используя:

export PATH=${PATH%:/home/avinash/Desktop/raj}

В основном:

${string%substring}

удаляет самое короткое совпадение $substringиз задней части $string.

Проверьте манипуляции со строками для получения дополнительной информации.

Раду Рэдяну
источник
2

Если вы хотите использовать его в качестве команды, вот небольшой скрипт:

#!/bin/bash

# This script removes folder from PATH variable
# Folders to remove reading as arguments

if [ $# -lt 1 ]; then
    echo "You should give at least one argument"
    echo "For example"
    echo "$0 /usr/local/bin"
else
    FOLDERS_TO_REMOVE=`echo $@ | sed 's/ /|/g'`

    echo "You actually PATH variable is:"
    echo $PATH
    echo "###"

    PATH=$( echo ${PATH} | tr -s ":" "\n" | grep -vwE "(${FOLDERS_TO_REMOVE})" | tr -s "\n" ":" | sed "s/:$//" )

    echo "Now you need to run"
    echo "export PATH=$PATH"
fi

Назовите это unexport, и добавьте это к своему ПУТИ.

Применение:

unexport /usr/local/bin /bin /sbin

Этот скрипт не меняет ваш на самом деле PATH. Если вы хотите, чтобы скрипт делал это, вам следует изменить последнюю строку. Заменить echo "export PATH=$PATH"наexport PATH=$PATH

c0rp
источник
2

Если вы поместите exportоператор в любой файл инициализации оболочки, например ~/.bashrc, вы можете использовать следующие команды в терминале,

#remove the export statement from the file.
sed -i 's#export PATH=$PATH:/home/avinash/Desktop/raj##g' ~/.bashrc
#source ~/.bashrc
. ~/.bashrc

Это удалит папку из пути.

Если вы экспортировали путь из терминала

Папка будет в пути, пока вы находитесь в этой оболочке. Чтобы перезаписать путь, вы должны назначить новый путь. Как уже упоминалось в другом ответе.

Вы можете использовать следующую команду, чтобы установить старый путь

export PATH=`echo ${PATH/\:\/home\/avinash\/Desktop\/raj/}`

Или просто

export PATH=${PATH/':/home/avinash/Desktop/raj'/}

Это замена подстроки,

${string/substring/replacement}
souravc
источник
2

Один грязный хак

export PATH="$( echo $PATH| tr : '\n' |grep -v raj | paste -s -d: )"
  1. разделите каждый каталог в вашем PATH по строке, используя tr
  2. удалите то, что вы не хотите (путь соответствия "raj"), используя grep -v, и
  3. свернуть обратно в длинную строку с разделителем ":", используя paste.

это, вероятно, не будет работать хорошо, если какой-либо каталог в PATH имеет :или новую строку

если вы часто этим занимаетесь, рассмотрите возможность сделать это функцией и сохранить в своем профиле оболочки (например .bashrc, .zshrc)

# use like: rminpath "raj"
rminpath(){ export PATH="$( echo $PATH| tr : '\n' |grep -v "$1" | paste -sd: )"; }
Будет
источник
1

export PATH=$PATH:/home/avinash/Desktop/raj (Здесь вы добавили файл в переменную path.)

echo $PATH
Если вы выполните эту команду, это вывод:

/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/avinash/Desktop/raj

Как вы удалите его с пути? просто выполнить

$ export PATH=${PATH/'/home/avinash/Desktop/raj'/}

Это концепция замены строк.

$ export PATH=${string/substring/replacement}
Шалом Александр
источник
0

Встроенная команда оболочки exportНе определяет, установлена ​​ли переменная или нет, она определяет, установлены ли переменная и ее значение в подпроцессах.

Изменение переменной, экспортированной или нет, не влияет на родительский процесс или выше, поэтому изменение его в скрипте не имеет никакого эффекта, если только этот скрипт не запущен source.

Функция оболочки:

function trimpath {
    PATH=${PATH%:*}
}

обрежет последний компонент переменной PATH. На его exportстатус это не влияет.

Дэвид Леджер
источник
0

объявляйте -x PATH = "/ требуемый / путь / вы_want", если я не ошибаюсь, что сам обновит то, что вы хотите, и это полностью по вашему желанию, что это будет. [Убедитесь, что вы работаете от имени пользователя root и как требуемый пользователь, на которого вы хотите, чтобы это изменение повлияло] Чтобы быть уверенным, запустите ENV впоследствии, чтобы убедиться, что $ PATH был эффективно изменен так, как вы хотите. (Это полезно для изменения любого вывода, который вы получите при запуске '/ usr / bin / env'. Хотя я не знаю, является ли он постоянным. В этом отношении сделайте, как указано выше, и измените ~ / .bashrc для это придерживаться)

Джейк Болдуин
источник