Entfernen Sie redundante Pfade von $PATH-variable
Ich haben den gleichen Pfad in der $PATH-variable 6-mal.
War ich nicht Abmelden, um zu überprüfen, ob es funktioniert hat.
Wie kann ich entfernen Sie die Duplikate?
Die $PATH-variable sieht wie folgt aus:
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin
Wie würde ich es zurücksetzen, um nur
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
- wo haben Sie es 6 mal? in welchen Dateien?
- möglich, Duplikat der Was ist der eleganteste Weg, um entfernen Sie einen Pfad aus der $PATH-variable in der Bash?
- Siehe Doppelte Einträge in $PATH ein problem?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie nur ausführen:
wäre, die für die aktuelle Sitzung, wenn Sie möchten, um dauerhaft zu ändern fügen Sie es zu jedem .bashrc bash.bashrc, /etc/profile - was passt zu Ihrem system-und Benutzer-Anforderungen.
echo 'export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' >> ~/.bashrc
Wenn Sie die Bash verwenden, können Sie auch Folgendes tun, wenn, sagen wir mal, Sie wollen, um das Verzeichnis zu entfernen
/home/wrong/dir/
von IhremPATH
variable:PATH=$(echo $PATH | sed -e 's|:/home/wrong/dir|$||')
echo $PATH | sed -e 's/:\/home\/wrong\/dir\/$//'
), bevor er es WEG.$PATH
. Verwenden Sie diese ein:PATH=$(echo :$PATH: | sed -e 's,:/home/wrong/dir:,:,g' -e 's/^://' -e 's/:$//')
$ PATH=
echo $PATH | sed -e 's/:\scratch\/sjn\/anaconda\/bin\/python\/$//"` für entfernen /Kratzer/sjn/anaconda/bin/pythonWenn Sie entfernen müssen, ein Weg aus der
PATH
Variablen, bevor Sie Ihr Skript ausgeführt wird, fügen Sie diese an den Anfang des Skripts:Wenn Sie brauchen, können Sie re-fügen Sie es an der Vorderseite der Liste mit:
Oder Sie können re-fügen Sie es an das Ende der Liste mit:
Linux From Scratch hat dieses Funktion in /etc/profile
Dies ist gedacht für die Verwendung mit diesen Funktionen für das hinzufügen, um den Pfad, so dass Sie tun es nicht Redundant:
Einfache Nutzung ist nur eben
pathremove
den Verzeichnis-Pfad zu entfernen - aber Bedenken Sie, dass es exakt übereinstimmen:Dadurch entfernen Sie jede Instanz von diesem Verzeichnis aus dem Weg.
Wenn Sie das Verzeichnis in Ihrem Pfad, aber ohne Redundanzen, könnten Sie nur verwenden Sie eine der anderen Funktionen, z.B. - für Ihren konkreten Fall:
Aber, es sei denn, die Lesbarkeit ist die Sorge, an diesem Punkt sind Sie besser dran, nur tun:
Würde die oben genannten arbeiten in alle shells, die auf den Menschen bekannt?
Ich würde vermuten, die oben in
sh
,dash
, undbash
zumindest. Ich wäre überrascht zu erfahren, dass es nicht funktioniert incsh
,fish', or
ksh`. Ich bezweifle, dass es funktionieren würde in der Windows-Kommandozeile oder Powershell.Wenn Sie Python haben, wird die folgende Art von Befehl sollte das tun, was direkt gefragt (das ist, entfernen Sie redundante Pfade):
Einen one-liner (zu sidestep mehrzeilige Ausgaben):
Oben entfernt später redundante Pfade. Zum entfernen der früheren redundante Pfade verwenden eine umgekehrte Liste-index und reverse es wieder:
${!PATHVARIABLE}
ist eine Art variable, Dereferenzierung, aber ich bin mir nicht sicher wie das hier funktioniert. Könnten Sie das erklären bitte ?local
builtin (nur innerhalb einer Funktion.) Wenn Sie weitere Fragen haben, sollten Sie wahrscheinlich eine neue Frage auf der Website (nach der Suche nach es zuerst um sicherzustellen, Sie sind nicht zum erstellen einer exakten Kopie...).Hier ist eine Zeile code, reinigt den WEG
Verwendet
/bin/awk
so es funktioniert, auch wenn der PFAD gebrochen istIn der bash kann man einfach ${var/find/replace}
Oder in diesem Fall (als das ersetzen etwas leer ist) nur:
Ich kam hier zuerst aber ging sonst ware als ich dachte, es wäre ein parameter expansion, dies zu tun. Einfacher als die sed!.
So ersetzen Sie die Platzhalter-Zeichen oder ein Wort in die variable mit dem Wert aus einer anderen Variablen in der Bash?
%
Mittel entsprechen, wenn am Ende der Zeichenfolge,#
ist für den Anfang.Wenn Sie nur wollen, zu entfernen, doppelte Wege, ich benutze dieses Skript, das ich schrieb eine Weile zurück, da ich Probleme mit mehreren perl5/bin Wege:
Und ich habe es in meiner ~/.Profil am Ende. Da ich mit BASH fast ausschließlich, ich habe nicht versucht, es in anderen shells.
|uniq
zu|sort|uniq
um dies zu beheben, aber das wird sich ändern, um von allen Verzeichnissen im Pfad, was ich nicht glaube, ist eine wünschenswerte Nebenwirkung.Für eine einfache copy-paste-Vorlage, die ich verwenden diese Perl-Schnipsel:
Diese Weise brauchen Sie nicht, um zu entkommen die Schrägstriche für den operator ersetzen.
echo $PATH
PATH= # pass new list of entries
Vorausgesetzt, Ihr shell ist Bash, Sie können den Pfad mit
aber wie Levon sagte in einer anderen Antwort, sobald Sie beenden die shell werden die änderungen Weg. Sie wahrscheinlich wollen, um Ihre
PATH
im~/.bash_profile
oder~/.bashrc
.Gibt es keine standard-tools zu "Bearbeiten" den Wert
$PATH
(D. H. "Ordner hinzufügen" nur, wenn es nicht bereits vorhanden ist" oder "diesen Ordner löschen").Zu überprüfen, was der Weg sein würde, wenn Sie sich das nächste mal benutzen
telnet localhost
(odertelnet 127.0.0.1
). Es wird dann Fragen Sie nach Ihrem Benutzernamen und Passwort.Dies gibt Ihnen eine neue login-shell (also eine komplett neue, dass die Erben nicht alles von der aktuellen Umgebung).
Können Sie überprüfen den Wert der
$PATH
es und Bearbeiten von rc-Dateien, bis es richtig ist. Dies ist auch nützlich, um zu sehen, ob Sie sich mal melden könnte, überhaupt nachdem eine änderung auf eine wichtige Datei./bin/bash -i
. Viel weniger ärger.Wie haben Sie diese doppelte Wege zu Ihrer PATH-variable? Müssen Sie bearbeitet haben, einen Ihrer
.
- Dateien. (.tcshrc
oder.bashrc
etc. abhängig von Ihrem speziellen system/shell). Die Möglichkeit, es zu beheben, Bearbeiten Sie die Datei erneut und entfernen Sie doppelte Wege.Wenn Sie nicht Bearbeiten Sie alle Dateien, und Sie müssen Sie den PFAD geändert interaktiv. In diesem Fall wird die änderung nicht "kleben", dh, wenn Sie öffnen Sie eine weitere shell, oder sich Abmelden und wieder anmelden, werden die änderungen automatisch gegangen.
Beachten Sie, dass es gibt einige systemweiten config-Dateien zu, aber es ist unwahrscheinlich, dass Sie modifiziert diese, so dass die meisten wahrscheinlich werden Sie ändern von Dateien in Ihrem persönlichen home-Verzeichnis (wenn Sie möchten, um diese änderungen permanent, sobald Sie sich auf eine Menge von Pfaden)