Я добавил путь к системному пути ($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
из переменной системного пути с помощью команды ( аналогично команде экспорта при добавлении пути ).
Выполнение 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 PATH=${PATH%:/home/avinash/Desktop/raj}
В целом:
${string%substring}
удаляет самое короткое соответствие $substring
от назад из $string
.
Выезд Обработка строк для большего количества информации
Если Вы помещаете 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}
Если Вы хотите, используют его в качестве команды, вот немного сценария:
#!/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
Один грязный взлом
export PATH="$( echo $PATH| tr : '\n' |grep -v raj | paste -s -d: )"
tr
grep -v
, и paste
. это, вероятно, привычка работает хорошо, если какой-либо dir в ПУТИ имеет :
или новая строка
, если Вы делаете это много, считаете создание его функцией и сохраняющий в Вашем профиле оболочки (например, .bashrc
, .zshrc
)
# use like: rminpath "raj"
rminpath(){ export PATH="$( echo $PATH| tr : '\n' |grep -v "$1" | paste -sd: )"; }
Оболочка, которую не определяет встроенная команда export
, установлена ли переменная, она определяет, установлены ли переменная и ее значение также в подпроцессах.
Замена переменной, экспортируемой или нет, не влияет на родительский процесс или выше, так изменение его в сценарии не имеет никакого эффекта, если тот скрипт не запущен с source
.
А окружают функцию:
function trimpath {
PATH=${PATH%:*}
}
урежет последний компонент переменной ПУТИ. export
состояние незатронуто.
экспорт ПУТЬ = $ ПУТЬ: / 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}
declare -x PATH = "/ desire / path / you_want", если я не ошибаюсь, что само по себе обновит то, что вы хотите, и это будет полностью по вашему желанию, каким оно будет. [Убедитесь, что вы запускаете как root И как желаемый пользователь, для которого вы хотите, чтобы это изменение повлияло] Чтобы быть уверенным, запустите ENV после этого, чтобы убедиться, что $ PATH был эффективно изменен, как вы хотите. (Это можно использовать для изменения любого вывода, который вы получите при запуске '/ usr / bin / env'. Хотя я не знаю, является ли он постоянным. В этом отношении сделайте, как указано выше, и измените ~ / .bashrc для его приклеить)
Я просто использую sed, вот так
PATH=$(sed "s/\/home\/avinash\/Desktop\/raj//" <<< $PATH)
это должно сработать.
Небольшое пояснение, как это будет работать: Сначала мы определяем настройку значения переменной PATH=, затем мы должны использовать значение результата следующей команды в качестве значения этой переменной, просто используя $(command), после того как появилась команда SED sed "s///", / будут разделителями для этой команды, по умолчанию мы используем /, но вы можете установить что-нибудь вроде - или _. Первый s предназначен для замены, затем идет первый разделитель, после идет выражение, которое вы ищете, затем еще один разделитель, затем выражение, которое вы хотите заменить первым (которое вы ищете), затем еще одно разделитель (последний), и вы можете использовать аргумент, например g, для глобальной замены.\ — это символ перехода, который используется для того, чтобы sed понимал, что следующий / — это литерал, а не разделитель. <<< предназначен для удаления переменной по команде sed.