GNU/Linux >> Tutoriales Linux >  >> Linux

Eliminar rutas redundantes de la variable $PATH

Aquí hay un código de una línea que limpia la RUTA

  • No altera el orden de la RUTA, solo elimina los duplicados
  • Trata:y empth PATH con gracia
  • No se utilizan caracteres especiales, por lo que no requiere escape
  • Usa /bin/awk por lo que funciona incluso cuando PATH está roto

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

Simplemente ejecuta:

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

eso sería para la sesión actual, si desea cambiar permanentemente, agréguelo a cualquier .bashrc, bash.bashrc, /etc/profile, lo que sea que se ajuste a su sistema y a las necesidades del usuario.

Nota:Esto es para Linux. Dejaremos esto claro para los nuevos programadores. (` , ') No intente SET =estos.


Linux:eliminar rutas redundantes de la variable $PATH

Linux From Scratch tiene esta función en /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"
}

Esto está diseñado para usarse con estas funciones para agregar a la ruta, para que no lo haga de manera redundante:

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

El uso simple es simplemente dar pathremove la ruta del directorio a eliminar, pero tenga en cuenta que tiene que coincidir exactamente:

$ pathremove /home/username/anaconda3/bin

Esto eliminará cada instancia de ese directorio de su ruta.

Si desea el directorio en su ruta, pero sin las redundancias, puede usar una de las otras funciones, p. - para su caso específico:

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

Pero, a menos que la legibilidad sea la preocupación, en este punto es mejor que simplemente hagas:

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

¿Funcionaría lo anterior en todos los caparazones conocidos por el hombre?

Supongo que lo anterior funciona en sh , dash y bash al menos. Me sorprendería saber que no funciona en csh , fish', or ksh`. Dudo que funcione en el shell de comandos de Windows o Powershell.

Si tiene Python, el siguiente tipo de comando debería hacer lo que se le pide directamente (es decir, eliminar rutas redundantes):

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

Una sola línea (para eludir los problemas de varias líneas):

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

Lo anterior elimina las rutas redundantes posteriores. Para eliminar rutas redundantes anteriores, use el índice de una lista invertida y vuelva a invertirlo:

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

Si está utilizando Bash, también puede hacer lo siguiente si, digamos, desea eliminar el directorio /home/wrong/dir/ de tu PATH variables:

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

Linux
  1. ¿Cómo agregar limpiamente a $path?

  2. $ruta Variable Env Variable?

  3. 2 formas de establecer permanentemente la variable $PATH en ubuntu

  4. Cómo desinstalar aria2 de Ubuntu

  5. Agregar una nueva entrada a la variable PATH en ZSH

Cómo agregar un directorio a PATH en Linux

Cómo quitar la contraseña de un archivo PDF en Linux

Cómo quitar un comando del historial en Linux

Cómo quitar (^M) caracteres de un archivo en Linux

Cómo quitar espacios de los nombres de archivo en Linux

¿Cómo eliminar Swap Space de Centos 7.x?