GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Entfernen Sie redundante Pfade aus der $PATH-Variablen

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 ist

    export 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\/$//'`

Linux
  1. Wie fügt man sauber zu $path hinzu?

  2. $path-Variable Env-Variable?

  3. 2 Möglichkeiten, die $PATH-Variable in Ubuntu dauerhaft festzulegen

  4. So setzen Sie die $Path-Variable in Linux

  5. So deinstallieren Sie aria2 von Ubuntu

So fügen Sie ein Verzeichnis zu PATH in Linux hinzu

So entfernen Sie ein Passwort aus einer PDF-Datei unter Linux

So entfernen Sie einen Befehl aus dem Verlauf in Linux

So entfernen Sie (^M) Zeichen aus einer Datei in Linux

So entfernen Sie Leerzeichen aus Dateinamen in Linux

Wie entferne ich Swap Space von Centos 7.x?