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

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

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

Теперь мой путь выглядит следующим образом:

$ 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

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

8
задан 12 March 2014 в 21:45

9 ответов

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

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

export PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
0
ответ дан 12 March 2014 в 21:45

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

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

В целом:

${string%substring}

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

Выезд Обработка строк для большего количества информации

0
ответ дан 12 March 2014 в 21:45

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

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

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

при экспорте пути из терминала

папка будет в пути, пока Вы находитесь в той оболочке. Для перезаписи пути, необходимо присвоить новый путь. Как oli уже упомянутый в другом ответе.

можно использовать следующую команду для устанавливания старого пути

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

Или, просто

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

Это - Замена Подстроки,

${string/substring/replacement}
0
ответ дан 12 March 2014 в 21:45

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

#!/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

2
ответ дан 12 March 2014 в 21:45

Один грязный взлом

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

это, вероятно, привычка работает хорошо, если какой-либо dir в ПУТИ имеет : или новая строка

, если Вы делаете это много, считаете создание его функцией и сохраняющий в Вашем профиле оболочки (например, .bashrc, .zshrc)

# use like: rminpath "raj"
rminpath(){ export PATH="$( echo $PATH| tr : '\n' |grep -v "$1" | paste -sd: )"; }
2
ответ дан 12 March 2014 в 21:45
  • 1
    Похож я использую Ubuntu 12.04.5 LTS На веб-сайте Nvidia, который 355 поддерживаемых продуктов, говорит " SDI Quadro: Quadro SDI" я должен использовать 352, так как у меня есть видеокарта GT540M? – BaisJohn 1 September 2015 в 04:58

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

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

А окружают функцию:

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

урежет последний компонент переменной ПУТИ. export состояние незатронуто.

0
ответ дан 8 October 2019 в 11:52

экспорт ПУТЬ = $ ПУТЬ: / home / avinash / Desktop / raj (Здесь вы добавили файл в переменную пути.)

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}
1
ответ дан 19 February 2020 в 13:01

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

0
ответ дан 19 February 2020 в 17:26

Я просто использую sed, вот так

PATH=$(sed "s/\/home\/avinash\/Desktop\/raj//" <<< $PATH)

это должно сработать.

Небольшое пояснение, как это будет работать: Сначала мы определяем настройку значения переменной PATH=, затем мы должны использовать значение результата следующей команды в качестве значения этой переменной, просто используя $(command), после того как появилась команда SED sed "s///", / будут разделителями для этой команды, по умолчанию мы используем /, но вы можете установить что-нибудь вроде - или _. Первый s предназначен для замены, затем идет первый разделитель, после идет выражение, которое вы ищете, затем еще один разделитель, затем выражение, которое вы хотите заменить первым (которое вы ищете), затем еще одно разделитель (последний), и вы можете использовать аргумент, например g, для глобальной замены.\ — это символ перехода, который используется для того, чтобы sed понимал, что следующий / — это литерал, а не разделитель. <<< предназначен для удаления переменной по команде sed.

0
ответ дан 11 January 2021 в 15:50

Другие вопросы по тегам:

Похожие вопросы: