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

Адаптированный от Не Так Часто Задаваемые Вопросы :

#include 
#include 
#include 

std::string data = "Abc";
std::transform(data.begin(), data.end(), data.begin(),
    [](unsigned char c){ return std::tolower(c); });

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

, Если Вы действительно ненавидите tolower() , вот специализированная альтернатива только для ASCII, что я не рекомендую использовать:

char asciitolower(char in) {
    if (in <= 'Z' && in >= 'A')
        return in - ('Z' - 'z');
    return in;
}

std::transform(data.begin(), data.end(), data.begin(), asciitolower);

знать, что tolower() может только сделать per-single-byte-character замену, которая является неподходящей для многих сценариев, особенно при использовании multi-byte-encoding как UTF-8.

8
задан 16.05.2020, 01:07

4 ответа

Выполнение 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
12
ответ дан 16.05.2020, 01:08

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

#!/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 "[110] /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

1
ответ дан 16.05.2020, 01:08

Если Вы помещаете 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}
2
ответ дан 16.05.2020, 01:09

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

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

В целом:

${string%substring}

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

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

10
ответ дан 16.05.2020, 01:09

Теги

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