GNU/Linux >> Znalost Linux >  >> Linux

Odstraňte nadbytečné cesty z proměnné $PATH

Zde je jednořádkový kód, který vyčistí PATH

  • Neruší pořadí PATH, pouze odstraňuje duplikáty
  • Laskavě zachází a vyprázdněte PATH
  • Nepoužívají se žádné speciální znaky, takže nevyžaduje escape
  • Používá /bin/awk takže to funguje, i když je PATH přerušená

    export PATH="$(echo "$PATH" |/bin/awk 'BEGIN{RS=":";}
    {sub(sprintf("%c$",10),"");if(A[$0]){}else{A[$0]=1;
    printf(((NR==1)?"":":")$0)}}')";
    

Stačí provést:

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

to by bylo pro aktuální relaci, pokud ji chcete trvale změnit, přidejte ji do libovolného .bashrc, bash.bashrc, /etc/profile – cokoliv, co vyhovuje vašemu systému a potřebám uživatele.

Poznámka:Toto je pro Linux. Vysvětlíme to novým kodérům. (` , ') Nepokoušejte se SET =tyto.


Linux:Odstraňte nadbytečné cesty z proměnné $PATH

Linux From Scratch má tuto funkci v /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"
}

Toto je určeno k použití s ​​těmito funkcemi pro přidávání do cesty, abyste to nedělali zbytečně:

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"
}

Jednoduché použití je dát pathremove cestu k adresáři, kterou chcete odstranit - ale mějte na paměti, že se musí přesně shodovat:

$ pathremove /home/username/anaconda3/bin

To odstraní každou instanci tohoto adresáře z vaší cesty.

Pokud chcete, aby byl adresář ve vaší cestě, ale bez redundance, můžete použít jednu z dalších funkcí, např. - pro váš konkrétní případ:

$ pathprepend /usr/local/sbin
$ pathappend /usr/local/bin
$ pathappend /usr/sbin
$ pathappend /usr/bin
$ pathappend /sbin
$ pathappend /bin
$ pathappend /usr/games

Ale pokud nejde o čitelnost, v tomto bodě je lepší udělat:

$ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Fungovalo by výše uvedené ve všech skořápkách, které člověk zná?

Předpokládal bych, že výše uvedené funguje v sh , dash a bash alespoň. Byl bych překvapen, kdybych zjistil, že to nefunguje v csh , fish', or ksh`. Pochybuji, že by to fungovalo v příkazovém prostředí Windows nebo Powershell.

Pokud máte Python, následující druh příkazu by měl dělat to, co je přímo požadováno (tj. odstranit nadbytečné cesty):

$ PATH=$( python -c "
import os
path = os.environ['PATH'].split(':')
print(':'.join(sorted(set(path), key=path.index)))
" )

Jednořádkový (k obejití víceřádkových problémů):

$ PATH=$( python -c "import os; path = os.environ['PATH'].split(':'); print(':'.join(sorted(set(path), key=path.index)))" )

Výše uvedené odstraní pozdější nadbytečné cesty. Chcete-li odstranit dřívější nadbytečné cesty, použijte index obráceného seznamu a znovu jej obraťte:

$ PATH=$( python -c "
import os
path = os.environ['PATH'].split(':')[::-1]
print(':'.join(sorted(set(path), key=path.index, reverse=True)))
" )

Pokud používáte Bash, můžete také provést následující, pokud, řekněme, chcete odstranit adresář /home/wrong/dir/ z vašeho PATH proměnná:

PATH=`echo $PATH | sed -e 's/:\/home\/wrong\/dir\/$//'`

Linux
  1. Tipy a triky pro proměnné prostředí Linuxu

  2. Jak čistě přidat do $path?

  3. Jak nastavit proměnnou $Path v Linuxu

  1. Jak odinstalovat aria2 z Ubuntu

  2. Odstraňte mezery z názvů souborů v Linuxu

  3. Jak odstraním kód VS a nastavení z Ubuntu?

  1. Jak nastavit proměnnou $PATH v Linuxu

  2. Jak přidat nebo odebrat uživatele ze skupiny v Linuxu

  3. $path Variable Env Variable?