Hier ist ein einzeiliger Code, der den PATH aufräumt
- Es stört die Reihenfolge des PATH nicht, entfernt nur Duplikate
- Behandelt:und leert PATH anmutig
- Es werden keine Sonderzeichen verwendet, daher ist kein Escapezeichen erforderlich
-
Verwendet
/bin/awk
es funktioniert also auch, wenn PATH defekt istexport PATH="$(echo "$PATH" |/bin/awk 'BEGIN{RS=":";} {sub(sprintf("%c$",10),"");if(A[$0]){}else{A[$0]=1; printf(((NR==1)?"":":")$0)}}')";
Sie führen einfach Folgendes aus:
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
das wäre für die aktuelle Sitzung, wenn Sie es dauerhaft ändern möchten, fügen Sie es zu einer beliebigen .bashrc, bash.bashrc, /etc/profile hinzu - was auch immer zu Ihrem System und Ihren Benutzeranforderungen passt.
Hinweis:Dies ist für Linux. Wir werden dies für neue Programmierer deutlich machen. (` , ') Versuchen Sie nicht SET =these.
Linux:Entfernen Sie redundante Pfade aus der $PATH-Variablen
Linux From Scratch hat diese Funktion in /etc/profile
# Functions to help us manage paths. Second argument is the name of the
# path variable to be modified (default: PATH)
pathremove () {
local IFS=':'
local NEWPATH
local DIR
local PATHVARIABLE=${2:-PATH}
for DIR in ${!PATHVARIABLE} ; do
if [ "$DIR" != "$1" ] ; then
NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
fi
done
export $PATHVARIABLE="$NEWPATH"
}
Dies soll mit diesen Funktionen zum Hinzufügen zum Pfad verwendet werden, damit Sie es nicht überflüssig machen:
pathprepend () {
pathremove $1 $2
local PATHVARIABLE=${2:-PATH}
export $PATHVARIABLE="$1${!PATHVARIABLE:+:${!PATHVARIABLE}}"
}
pathappend () {
pathremove $1 $2
local PATHVARIABLE=${2:-PATH}
export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}$1"
}
Einfache Verwendung ist, einfach pathremove
zu geben den zu entfernenden Verzeichnispfad - aber denken Sie daran, dass er genau übereinstimmen muss:
$ pathremove /home/username/anaconda3/bin
Dadurch wird jede Instanz dieses Verzeichnisses aus Ihrem Pfad entfernt.
Wenn Sie das Verzeichnis in Ihrem Pfad haben möchten, aber ohne die Redundanzen, können Sie einfach eine der anderen Funktionen verwenden, z. - für Ihren speziellen Fall:
$ pathprepend /usr/local/sbin
$ pathappend /usr/local/bin
$ pathappend /usr/sbin
$ pathappend /usr/bin
$ pathappend /sbin
$ pathappend /bin
$ pathappend /usr/games
Aber wenn es nicht um die Lesbarkeit geht, sollten Sie an dieser Stelle einfach Folgendes tun:
$ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Würde das obige in allen bekannten Shells funktionieren?
Ich würde davon ausgehen, dass das obige in sh
funktioniert , dash
, und bash
wenigstens. Ich wäre überrascht zu erfahren, dass es in csh
nicht funktioniert , fish', or
ksch`. Ich bezweifle, dass es in der Windows-Befehlsshell oder Powershell funktionieren würde.
Wenn Sie Python haben, sollte die folgende Art von Befehl das tun, was direkt gefragt wird (dh redundante Pfade entfernen):
$ PATH=$( python -c "
import os
path = os.environ['PATH'].split(':')
print(':'.join(sorted(set(path), key=path.index)))
" )
Ein Einzeiler (um mehrzeilige Probleme zu umgehen):
$ PATH=$( python -c "import os; path = os.environ['PATH'].split(':'); print(':'.join(sorted(set(path), key=path.index)))" )
Das obige entfernt spätere redundante Pfade. Um frühere redundante Pfade zu entfernen, verwenden Sie den Index einer umgekehrten Liste und kehren Sie ihn erneut um:
$ PATH=$( python -c "
import os
path = os.environ['PATH'].split(':')[::-1]
print(':'.join(sorted(set(path), key=path.index, reverse=True)))
" )
Wenn Sie Bash verwenden, können Sie auch Folgendes tun, wenn Sie beispielsweise das Verzeichnis /home/wrong/dir/
entfernen möchten von Ihrem PATH
Variable:
PATH=`echo $PATH | sed -e 's/:\/home\/wrong\/dir\/$//'`