Jak usunąć ścieżkę ze ścieżki systemowej (`$ PATH`) za pomocą poleceń terminalu?

10

Dodałem ścieżkę katalogu do ścieżki systemowej ( $PATH), uruchamiając,

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

Teraz moja ścieżka wygląda tak,

$ 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

Chcę usunąć /home/avinash/Desktop/rajze zmiennej ścieżki systemowej za pomocą polecenia ( podobnie jak polecenie eksportu podczas dodawania ścieżki ).

Avinash Raj
źródło
gdzie umieściłeś wyciąg eksportowy?
souravc
terminal gnome (ctrl + alt + t)
Avinash Raj

Odpowiedzi:

14

Uruchamianie export PATH=$PATH:/...nie obejmuje PATHcałego systemu. To tylko zmienna powłoki. Uruchom nową powłokę i BOOM , już jej nie ma. Oczywiście, jeśli dodałeś go do ~/.bashrc(lub innego pliku ładowania systemu), musisz cofnąć tę zmianę, ale nie wygląda to na twój problem.

Jeśli desperacko nie chcesz uruchamiać nowej powłoki, możesz ustawić ją, usuwając ją ręcznie:

export PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Oli
źródło
11

W bieżącej powłoce (bieżącej sesji terminalu gnome) możesz to zrobić za pomocą:

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

Ogólnie:

${string%substring}

Usuwa najkrótszy mecz $substringz tyłu z $string.

Sprawdź manipulację ciągiem, aby uzyskać więcej informacji.

Radu Rădeanu
źródło
2

Jeśli chcesz użyć go jako polecenia, oto mały skrypt:

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

Nazwij go unexporti dodaj do ŚCIEŻKI.

Stosowanie:

unexport /usr/local/bin /bin /sbin

Ten skrypt faktycznie nie zmienia twojego PATH. Jeśli chcesz, aby skrypt to zrobił, powinieneś zmienić ostatni wiersz. Zastępca echo "export PATH=$PATH"doexport PATH=$PATH

c0rp
źródło
2

Jeśli umieścisz exportinstrukcję w dowolnym pliku inicjującym powłokę ~/.bashrc, możesz użyć następujących poleceń w terminalu:

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

Spowoduje to usunięcie folderu ze ścieżki.

Jeśli wyeksportowałeś ścieżkę z terminala

Folder będzie na ścieżce tak długo, jak długo będziesz w tej powłoce. Aby zastąpić ścieżkę, musisz przypisać nową ścieżkę. Jak już wspomniano oli w innej odpowiedzi.

Aby ustawić starą ścieżkę, możesz użyć następującego polecenia

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

Lub po prostu

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

To jest zamiana podciągów,

${string/substring/replacement}
souravc
źródło
2

Jeden brudny hack to

export PATH="$( echo $PATH| tr : '\n' |grep -v raj | paste -s -d: )"
  1. oddziel każdy katalog w ścieżce za pomocą wiersza tr
  2. usuń to, czego nie chcesz (dopasuj ścieżkę „raj”), używając grep -vi
  3. zwinąć z powrotem w długi ciąg „:” za pomocą paste.

to prawdopodobnie nie zadziała dobrze, jeśli jakiś katalog w PATH ma :lub nową linię

jeśli okaże się to robi wiele, rozważ jej funkcji i zapisywanie w swoim profilu powłoki (np .bashrc, .zshrc)

# use like: rminpath "raj"
rminpath(){ export PATH="$( echo $PATH| tr : '\n' |grep -v "$1" | paste -sd: )"; }
Będzie
źródło
1

export PATH=$PATH:/home/avinash/Desktop/raj (Tutaj dodałeś plik do zmiennej ścieżki).

echo $PATH
Jeśli wykonasz to polecenie, jest to wynik:

/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

Jak usunąć go ze ścieżki? po prostu wykonaj

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

Jest to koncepcja zamiany łańcucha.

$ export PATH=${string/substring/replacement}
Shalom Alexander
źródło
0

Wbudowane polecenie powłoki exportNie określa, czy zmienna jest ustawiona, lecz określa, czy zmienna i jej wartość są również ustawione w podprocesach.

Zmiana zmiennej, eksportowanej lub nie, nie wpływa na proces nadrzędny ani wyżej, więc zmiana go w skrypcie nie ma żadnego efektu, chyba że skrypt jest uruchamiany z source.

Funkcja powłoki:

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

odetnie ostatni składnik zmiennej PATH. Jego exportstatus pozostaje niezmieniony.

David Ledger
źródło
0

zadeklaruj -x ŚCIEŻKA = "/ pożądany / ścieżka / you_want", jeśli się nie mylę, że sama zaktualizuje to, czego chcesz i to całkowicie na twoje życzenie, co to będzie. [Upewnij się, że działasz jako root ORAZ jako pożądany użytkownik, na którego zmianę ma wpłynąć] Aby mieć pewność, uruchom ENV, aby upewnić się, że zmienna $ PATH została odpowiednio zmieniona. (Jest to użyteczne do zmiany dowolnego wyniku, który otrzymasz po uruchomieniu „/ usr / bin / env”. Chociaż nie wiem, czy jest on stały, czy nie. Pod tym względem wykonaj jak podano powyżej i zmień ~ / .bashrc dla przykleić się)

Jake Baldwin
źródło