Как удалить путь из системного пути (`$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/Рабочий стол/raj

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

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

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

В общем:

${string%substring}

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

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

Бегущий 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

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

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

Это приведет к удалению папки из path.

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

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

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

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

Или, просто

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

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

${string/substring/replacement}

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

#!/bin/bash# This script removes folder from PATH variable# Folders to remove reading as argumentsif [ $# -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

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

export PATH="$( echo $PATH| tr : '\n' |grep -v raj | paste -s -d: )"
  1. разделите каждый каталог в вашем ПУТИ по строкам, используя 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: )"; }

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}

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

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

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

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

будет обрезан последний компонент переменной PATH. Его export статус остается неизменным.

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

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

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

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

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

куда вы положили заявление об экспорте?

терминал gnome(ctrl+alt+t)