Ich habe den gleichen Pfad in der Variablen $ PATH 6 Mal definiert.
Ich habe mich nicht abgemeldet, um zu überprüfen, ob es funktioniert hat.
Wie kann ich die Duplikate entfernen?
Die Variable $ PATH sieht folgendermaßen 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 auf einfach zurücksetzen
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Antworten:
Sie führen einfach aus:
Dies gilt für die aktuelle Sitzung, wenn Sie sie dauerhaft ändern möchten. Fügen Sie sie zu einem beliebigen .bashrc-, bash.bashrc- / / etc / -Profil hinzu - je nachdem, was Ihrem System und den Benutzeranforderungen entspricht.
Hinweis: Dies ist für Linux. Wir werden dies für neue Programmierer klar machen. (`, ') Versuchen Sie nicht, SET = this.
quelle
echo 'export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' >> ~/.bashrc
Wenn Sie Bash verwenden, können Sie auch Folgendes tun, wenn Sie beispielsweise das Verzeichnis
/home/wrong/dir/
aus IhrerPATH
Variablen entfernen möchten :quelle
PATH=$(echo $PATH | sed -e 's|:/home/wrong/dir|$||')
echo $PATH | sed -e 's/:\/home\/wrong\/dir\/$//'
) experimentieren, bevor man ihn PATH zuweist.$PATH
. Verwenden Sie diese:PATH=$(echo :$PATH: | sed -e 's,:/home/wrong/dir:,:,g' -e 's/^://' -e 's/:$//')
$ PATH=
echo $ PATH | sed -es /: \ / kratzer \ / sjn \ / anaconda \ / bin \ / python \ / $ // '`` zum entfernen von / kratzer / sjn / anaconda / bin / pythonLinux From Scratch hat diese Funktion in / etc / profile
Dies soll mit diesen Funktionen zum Hinzufügen zum Pfad verwendet werden, damit Sie dies nicht redundant tun:
Die einfache Verwendung besteht darin, nur
pathremove
den zu entfernenden Verzeichnispfad anzugeben. Beachten Sie jedoch, dass dieser genau übereinstimmen muss:Dadurch wird jede Instanz dieses Verzeichnisses aus Ihrem Pfad entfernt.
Wenn Sie das Verzeichnis in Ihrem Pfad haben möchten, aber ohne Redundanzen, können Sie einfach eine der anderen Funktionen verwenden, z. B. - für Ihren speziellen Fall:
Aber wenn es nicht um Lesbarkeit geht, ist es an dieser Stelle besser, nur Folgendes zu tun:
Würde das oben genannte in allen dem Menschen bekannten Schalen funktionieren?
Ich würde das oben zur Arbeit in anmaßen
sh
,dash
undbash
zumindest. Ich wäre überrascht zu erfahren, dass es nicht funktioniertcsh
,fish', or
ksh`. Ich bezweifle, dass es in Windows Command Shell oder Powershell funktionieren würde.Wenn Sie über Python verfügen, sollte der folgende Befehl die direkt angeforderten Anweisungen ausführen (dh redundante Pfade entfernen):
Ein Einzeiler (um mehrzeilige Probleme zu umgehen):
Das Obige entfernt später redundante Pfade. Um frühere redundante Pfade zu entfernen, verwenden Sie den Index einer umgekehrten Liste und kehren Sie ihn erneut um:
quelle
${!PATHVARIABLE}
ist dies eine Art variable Indirektion, aber ich bin mir nicht sicher, wie es hier funktioniert. Könnten Sie es bitte erklären?local
Element deklariert wurde (die nur innerhalb einer Funktion verwendet werden kann). Wenn Sie weitere Fragen haben, sollten Sie wahrscheinlich eine neue Frage auf der Site stellen (nachdem Sie zuerst danach gesucht haben, um dies sicherzustellen Sie erstellen kein genaues Duplikat ...).Hier ist ein einzeiliger Code, der den PFAD bereinigt
Wird verwendet,
/bin/awk
damit es auch dann funktioniert, wenn PATH fehlerhaft istquelle
echo $PATH
PATH= # pass new list of entries
quelle
Wenn Sie nur doppelte Pfade entfernen möchten, verwende ich dieses Skript, das ich vor einiger Zeit geschrieben habe, da ich Probleme mit mehreren perl5 / bin-Pfaden hatte:
Und ich habe es am Ende in mein ~ / .profil geschrieben. Da ich BASH fast ausschließlich benutze, habe ich es nicht in anderen Shells ausprobiert.
quelle
|uniq
,|sort|uniq
um dies zu beheben, aber dies ändert die Reihenfolge aller Verzeichnisse im Pfad, was ich nicht für einen wünschenswerten Nebeneffekt halte.Angenommen, Ihre Shell ist Bash, können Sie den Pfad mit festlegen
Aber wie Levon in einer anderen Antwort sagte, werden die Änderungen verschwunden sein, sobald Sie die Shell beenden. Sie möchten wahrscheinlich Ihr
PATH
in~/.bash_profile
oder einrichten~/.bashrc
.quelle
In Bash können Sie einfach $ {var / find / replace}
Oder in diesem Fall (da das Ersetzungsbit leer ist) einfach:
Ich kam zuerst hierher, ging aber zu einer anderen Ware, da ich dachte, dass es eine Parametererweiterung geben würde , um dies zu tun. Einfacher als sed!.
Wie ersetze ich ein Platzhalterzeichen oder -wort in einer Variablen durch einen Wert aus einer anderen Variablen in Bash?
quelle
%
bedeutet Übereinstimmung, wenn am Ende der Zeichenfolge#
steht, für den Anfang.Es gibt keine Standardwerkzeuge zum "Bearbeiten" des Werts von
$PATH
(dh "Ordner nur hinzufügen, wenn er noch nicht vorhanden ist" oder "Diesen Ordner entfernen").Verwenden Sie
telnet localhost
(odertelnet 127.0.0.1
) , um zu überprüfen, wie der Pfad beim nächsten Anmelden aussehen würde . Anschließend werden Sie nach Ihrem Benutzernamen und Passwort gefragt.Dadurch erhalten Sie eine neue Anmeldeshell (dh eine völlig neue, die nichts von der aktuellen Umgebung erbt).
Sie können den Wert der
$PATH
dort überprüfen und Ihre RC-Dateien bearbeiten, bis es korrekt ist. Dies ist auch nützlich, um festzustellen, ob Sie sich nach einer Änderung an einer wichtigen Datei überhaupt wieder anmelden können.quelle
/bin/bash -i
. Viel weniger Ärger.Wie haben Sie diese doppelten Pfade zu Ihrer PATH-Variablen hinzugefügt? Sie müssen eine Ihrer
.
Dateien bearbeitet haben . (.tcshrc
, oder.bashrc
usw., abhängig von Ihrem speziellen System / Ihrer Shell). Sie können das Problem beheben, indem Sie die Datei erneut bearbeiten und die doppelten Pfade entfernen.Wenn Sie nicht bearbeiten Sie alle Dateien, und Sie müssen Sie den Pfad interaktiv geändert haben. In diesem Fall bleiben die Änderungen nicht "hängen", dh wenn Sie eine andere Shell öffnen oder sich abmelden und wieder anmelden, werden die Änderungen automatisch gelöscht.
Beachten Sie, dass es auch einige systemweite Konfigurationsdateien gibt, aber es ist unwahrscheinlich, dass Sie diese geändert haben. Daher werden Sie höchstwahrscheinlich Dateien in Ihrem persönlichen Ausgangsverzeichnis ändern (wenn Sie diese Änderungen dauerhaft vornehmen möchten, sobald Sie sich für eine Reihe von Pfaden entschieden haben).
quelle
Für eine einfache Vorlage zum Kopieren und Einfügen verwende ich dieses Perl-Snippet:
Auf diese Weise müssen Sie den Schrägstrichen für den Ersatzoperator nicht entkommen.
quelle