Wie entferne ich einen Pfad aus dem Systempfad (`$ PATH`) mit Terminalbefehlen?

10

Ich habe einen Systempfad zu system path ( $PATH) hinzugefügt, indem ich ausgeführt habe:

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

Jetzt sieht mein Weg so aus,

$ 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

Ich möchte /home/avinash/Desktop/rajmithilfe eines Befehls aus der Systempfadvariablen entfernen ( wie es der Exportbefehl beim Hinzufügen eines Pfads tut ).

Avinash Raj
quelle
Wo haben Sie die Exportanweisung abgelegt?
Souravc
Gnomterminal (Strg + Alt + T)
Avinash Raj

Antworten:

14

Durch das Ausführen export PATH=$PATH:/...wird Ihr PATHSystem nicht systemweit festgelegt. Es ist nur eine Shell-Variable. Starten Sie eine neue Shell und BOOM , es ist weg. Wenn Sie dies zu ~/.bashrc(oder einer anderen Umgebungs-Bootstrap-Datei) hinzugefügt haben, müssen Sie diese Änderung natürlich rückgängig machen, aber es klingt hier nicht nach Ihrem Problem.

Wenn Sie keine neue Shell starten möchten, können Sie sie festlegen, indem Sie sie manuell entfernen.

export PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Oli
quelle
11

In Ihrer aktuellen Shell (Ihrer aktuellen Sitzung von gnome-terminal) können Sie dies tun mit:

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

Allgemein:

${string%substring}

löscht die kürzeste Übereinstimmung von $substringvon hinten von $string.

Weitere Informationen finden Sie unter String-Manipulation .

Radu Rădeanu
quelle
2

Wenn Sie es als Befehl verwenden möchten, finden Sie hier ein kleines Skript:

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

Nennen Sie es unexportund fügen Sie es Ihrem PFAD hinzu.

Verwendungszweck:

unexport /usr/local/bin /bin /sbin

Dieses Skript ändert Ihre tatsächlich nicht PATH. Wenn Sie möchten, dass das Skript dies tut, sollten Sie die letzte Zeile ändern. Ersatz echo "export PATH=$PATH"fürexport PATH=$PATH

c0rp
quelle
2

Wenn Sie die exportAnweisung in eine beliebige Shell-Initiationsdatei einfügen ~/.bashrc, können Sie die folgenden Befehle im Terminal verwenden:

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

Der Ordner wird aus dem Pfad entfernt.

Wenn Sie den Pfad von einem Terminal exportiert haben

Der Ordner befindet sich im Pfad, solange Sie sich in dieser Shell befinden. Um den Pfad zu überschreiben, müssen Sie einen neuen Pfad zuweisen. Wie oli bereits in der anderen Antwort erwähnt.

Mit dem folgenden Befehl können Sie den alten Pfad festlegen

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

Oder einfach

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

Dies ist Teilstring-Ersatz,

${string/substring/replacement}
Souravc
quelle
2

Ein schmutziger Hack ist

export PATH="$( echo $PATH| tr : '\n' |grep -v raj | paste -s -d: )"
  1. Trennen Sie jedes Verzeichnis in Ihrem Pfad durch eine Zeile mit tr
  2. Entfernen Sie mit grep -vund , was Sie nicht möchten (Pfadübereinstimmung mit "raj")
  3. kollabieren mit in eine lange ":" begrenzte Zeichenfolge zurück paste.

Dies wird wahrscheinlich nicht gut funktionieren, wenn ein Verzeichnis in PATH :oder eine neue Zeile vorhanden ist

wenn Sie dies selbst zu tun viel finden, denkt so dass es eine Funktion und Speicher in der Shell - Profil (zB .bashrc, .zshrc)

# use like: rminpath "raj"
rminpath(){ export PATH="$( echo $PATH| tr : '\n' |grep -v "$1" | paste -sd: )"; }
Wille
quelle
1

export PATH=$PATH:/home/avinash/Desktop/raj (Hier haben Sie die Datei zur Pfadvariablen hinzugefügt.)

echo $PATH
Wenn Sie diesen Befehl ausführen, ist dies die Ausgabe:

/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

Wie entfernst du es vom Pfad? einfach ausführen

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

Es ist ein Konzept des String-Austauschs.

$ export PATH=${string/substring/replacement}
Shalom Alexander
quelle
0

Der integrierte Shell-Befehl exportbestimmt nicht, ob eine Variable festgelegt ist oder nicht, sondern bestimmt, ob die Variable und ihr Wert auch in Unterprozessen festgelegt werden.

Das Ändern einer exportierten oder nicht exportierten Variablen wirkt sich nicht auf den übergeordneten Prozess oder höher aus. Das Ändern in einem Skript hat daher keine Auswirkungen, es sei denn, dieses Skript wird mit ausgeführt source.

Eine Shell-Funktion:

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

schneidet die letzte Komponente der PATH-Variablen ab. Sein exportStatus bleibt unberührt.

David Ledger
quelle
0

deklarieren Sie -x PATH = "/ required / path / you_want", wenn ich mich nicht irre, dass selbst aktualisiert wird, was Sie wollen, und es liegt ganz in Ihrem Auftrag, was es sein wird. [Stellen Sie sicher, dass Sie als root UND als der gewünschte Benutzer ausgeführt werden, für den sich diese Änderung auswirken soll.] Um doppelt sicher zu sein, führen Sie anschließend ENV aus, um sicherzustellen, dass $ PATH effektiv wie gewünscht geändert wurde. (Dies kann verwendet werden, um die Ausgabe zu ändern, die Sie erhalten, wenn Sie '/ usr / bin / env' ausführen. Obwohl ich nicht weiß, ob sie dauerhaft ist oder nicht. Gehen Sie in dieser Hinsicht wie oben angegeben vor und ändern Sie ~ / .bashrc für es zu kleben)

Jake Baldwin
quelle