¿Cómo eliminar una ruta de la ruta del sistema (`$ PATH`) usando comandos de terminal?

10

Agregué una ruta de directorio a la ruta del sistema ( $PATH) ejecutando,

export PATH=$PATH:/home/avinash/Desktop/raj

Ahora mi camino se ve así,

$ echo $ PATH
/ usr / lib / lightdm / lightdm: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / local / games : / inicio / avinash / Escritorio / raj

Quiero eliminar /home/avinash/Desktop/rajde la variable de ruta del sistema usando el comando ( como lo hace el comando de exportación al agregar la ruta ).

Avinash Raj
fuente
¿Dónde pusiste la declaración de exportación?
souravc
terminal gnome (ctrl + alt + t)
Avinash Raj

Respuestas:

14

Correr export PATH=$PATH:/...no configura todo el PATHsistema. Es solo una variable de shell. Comience un nuevo shell y BOOM , se ha ido. Obviamente, si ha agregado eso a ~/.bashrc(u otro archivo de arranque del entorno) tendrá que revertir ese cambio, pero no parece ser su problema aquí.

Si está desesperado por no iniciar un nuevo shell, puede configurarlo eliminándolo manualmente, con:

export PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Oli
fuente
11

En su shell actual (su sesión actual de gnome-terminal) puede hacer esto usando:

export PATH=${PATH%:/home/avinash/Desktop/raj}

En general:

${string%substring}

eliminaciones de coincidencia más corta $substringde la vuelta de $string.

Echa un vistazo a la manipulación de cadenas para obtener más información.

Radu Rădeanu
fuente
2

Si quieres usarlo como un comando, aquí hay un pequeño script:

#!/bin/bash

# This script removes folder from PATH variable
# Folders to remove reading as arguments

if [ $# -lt 1 ]; then
    echo "You should give at least one argument"
    echo "For example"
    echo "$0 /usr/local/bin"
else
    FOLDERS_TO_REMOVE=`echo $@ | sed 's/ /|/g'`

    echo "You actually PATH variable is:"
    echo $PATH
    echo "###"

    PATH=$( echo ${PATH} | tr -s ":" "\n" | grep -vwE "(${FOLDERS_TO_REMOVE})" | tr -s "\n" ":" | sed "s/:$//" )

    echo "Now you need to run"
    echo "export PATH=$PATH"
fi

Póngale un nombre unexporty agréguelo a su RUTA.

Uso:

unexport /usr/local/bin /bin /sbin

Este script no cambia tu realidad PATH. Si desea que el script lo haga, debe cambiar la última línea. Sustituir echo "export PATH=$PATH"aexport PATH=$PATH

c0rp
fuente
2

Si coloca la exportdeclaración en cualquier archivo de inicio de shell como ~/.bashrc, puede usar los siguientes comandos en la terminal,

#remove the export statement from the file.
sed -i 's#export PATH=$PATH:/home/avinash/Desktop/raj##g' ~/.bashrc
#source ~/.bashrc
. ~/.bashrc

Eliminará la carpeta de la ruta.

Si ha exportado la ruta desde una terminal

La carpeta estará en ruta mientras usted esté en ese shell. Para sobrescribir la ruta, debe asignar una nueva ruta. Como oli ya mencionó en la otra respuesta.

Puede usar el siguiente comando para establecer la ruta anterior

export PATH=`echo ${PATH/\:\/home\/avinash\/Desktop\/raj/}`

O simplemente

export PATH=${PATH/':/home/avinash/Desktop/raj'/}

Este es el reemplazo de la subcadena,

${string/substring/replacement}
souravc
fuente
2

Un truco sucio es

export PATH="$( echo $PATH| tr : '\n' |grep -v raj | paste -s -d: )"
  1. separe cada directorio en su RUTA por línea usando tr
  2. elimina lo que no quieras (ruta que coincida con "raj") usando grep -v, y
  3. colapsar de nuevo en una larga cadena delimitada ":" usando paste.

esto probablemente no funcionará bien si algún directorio en PATH tiene :o una nueva línea

si te encuentras haciendo esto mucho, considera convertirlo en una función y guardarlo en tu perfil de shell (por ejemplo .bashrc, .zshrc)

# use like: rminpath "raj"
rminpath(){ export PATH="$( echo $PATH| tr : '\n' |grep -v "$1" | paste -sd: )"; }
Será
fuente
1

export PATH=$PATH:/home/avinash/Desktop/raj (Aquí ha agregado el archivo a la variable de ruta).

echo $PATH
Si ejecuta este comando, esta es la salida:

/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/avinash/Desktop/raj

¿Cómo lo eliminas del camino? solo ejecuta

$ export PATH=${PATH/'/home/avinash/Desktop/raj'/}

Es un concepto de reemplazo de cuerdas.

$ export PATH=${string/substring/replacement}
Shalom Alexander
fuente
0

El comando de construcción de shell exportNo determina si una variable está configurada o no, determina si la variable y su valor también están configurados en subprocesos.

Cambiar una variable, exportada o no, no afecta el proceso padre o superior, por lo que cambiarla en un script no tiene ningún efecto a menos que se ejecute ese script source.

Una función de shell:

function trimpath {
    PATH=${PATH%:*}
}

recortará el último componente de la variable PATH. Su exportestado no se ve afectado.

David Ledger
fuente
0

declare -x PATH = "/ deseado / ruta / you_want" si no me equivoco, en sí mismo actualizará lo que desea y está completamente a su disposición lo que será. [Asegúrese de ejecutar como root Y como el usuario deseado para el que desea que este cambio afecte]. Para estar doblemente seguro, ejecute ENV después para asegurarse de que $ PATH se modificó efectivamente como lo desea. (Esto es útil para alterar cualquiera de los resultados que obtendrá cuando ejecute '/ usr / bin / env'. Aunque no sé si es permanente o no. En ese sentido, haga lo que se indicó anteriormente y modifique ~ / .bashrc para que se pegue)

Jake Baldwin
fuente