He definido la misma ruta en la variable $ PATH 6 veces.
No estaba cerrando sesión para comprobar si funcionaba.
¿Cómo puedo eliminar los duplicados?
La variable $ PATH se ve así:
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin
¿Cómo lo restablecería a solo
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Respuestas:
Simplemente ejecutas:
eso sería para la sesión actual, si desea cambiar permanentemente, agréguelo a cualquier .bashrc, bash.bashrc, / etc / profile, lo que se ajuste a las necesidades de su sistema y usuario.
Nota: Esto es para Linux. Dejaremos esto claro para los nuevos codificadores. (`, ') No intente SET = estos.
fuente
echo 'export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' >> ~/.bashrc
Si está utilizando Bash, también puede hacer lo siguiente si, digamos, desea eliminar el directorio
/home/wrong/dir/
de suPATH
variable:fuente
PATH=$(echo $PATH | sed -e 's|:/home/wrong/dir|$||')
echo $PATH | sed -e 's/:\/home\/wrong\/dir\/$//'
) antes de asignarlo a RUTA.$PATH
. Utilice este:PATH=$(echo :$PATH: | sed -e 's,:/home/wrong/dir:,:,g' -e 's/^://' -e 's/:$//')
$ PATH=
echo $ PATH | sed -e 's /: \ / scratch \ / sjn \ / anaconda \ / bin \ / python \ / $ //' '`para eliminar / scratch / sjn / anaconda / bin / pythonLinux From Scratch tiene esta función en / etc / profile
Está destinado a ser utilizado con estas funciones para agregar a la ruta, para que no lo haga de forma redundante:
El uso simple es simplemente dar
pathremove
la ruta del directorio para eliminar, pero tenga en cuenta que tiene que coincidir exactamente: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, por ejemplo, para su caso específico:
Pero, a menos que la legibilidad sea la preocupación, en este punto es mejor que solo haga lo siguiente:
¿Funcionaría lo anterior en todos los depósitos conocidos por el hombre?
Yo presumiría lo anterior para el trabajo en
sh
,dash
ybash
por lo menos. Me sorprendería aprender que no funciona encsh
,fish', or
ksh`. Dudo que funcione en el shell de comandos de Windows o Powershell.Si tiene Python, el siguiente tipo de comando debe hacer lo que se le pide directamente (es decir, eliminar rutas redundantes):
Una línea (para evitar problemas multilínea):
Lo anterior elimina las rutas redundantes posteriores. Para eliminar rutas redundantes anteriores, use el índice de una lista inversa y vuelva a invertirlo:
fuente
${!PATHVARIABLE}
es una especie de indirección variable, pero no estoy seguro de cómo funciona aquí. ¿Podría explicarlo por favor?local
incorporado (que solo se puede usar dentro de una función). Si tiene más preguntas, probablemente debería hacer una nueva pregunta en el sitio (después de buscarla primero para asegurarse no estás creando un duplicado exacto ...).Aquí hay un código de una línea que limpia la RUTA
Utiliza
/bin/awk
para que funcione incluso cuando la RUTA está rotafuente
echo $PATH
PATH= # pass new list of entries
fuente
Si solo desea eliminar cualquier ruta duplicada, utilizo este script que escribí hace un tiempo ya que tenía problemas con múltiples rutas perl5 / bin:
Y lo puse en mi perfil ~ /. Al final. Como uso BASH casi exclusivamente, no lo he probado en otros shells.
fuente
|uniq
a|sort|uniq
para solucionar esto, pero esto cambiará el orden de todos los directorios en la ruta, lo que no creo que sea un efecto secundario deseable.Suponiendo que su shell es Bash, puede establecer el camino con
pero como dijo Levon en otra respuesta, tan pronto como termine el shell, los cambios se habrán ido. Es posible que desee configurar su
PATH
en~/.bash_profile
o~/.bashrc
.fuente
En bash simplemente puedes $ {var / find / replace}
O en este caso (ya que el bit de reemplazo está vacío) simplemente:
Vine aquí primero, pero fui a lo demás porque pensé que habría una expansión de parámetros para hacer esto. Más fácil que sed!
¿Cómo reemplazar el carácter o la palabra del marcador de posición en la variable con el valor de otra variable en Bash?
fuente
%
significa coincidencia si al final de la cadena,#
es para el comienzo.No existen herramientas estándar para "editar" el valor de
$PATH
(es decir, "agregar carpeta solo cuando aún no existe" o "eliminar esta carpeta").Para verificar cuál sería la ruta la próxima vez que inicie sesión, use
telnet localhost
(otelnet 127.0.0.1
). Luego le pedirá su nombre de usuario y contraseña.Esto le proporciona un nuevo shell de inicio de sesión (es decir, uno completamente nuevo que no hereda nada del entorno actual).
Puede verificar el valor de
$PATH
allí y editar sus archivos rc hasta que sea correcto. Esto también es útil para ver si puede iniciar sesión nuevamente después de hacer un cambio en un archivo importante.fuente
/bin/bash -i
. Mucho menos problemas.¿Cómo agregaste estas rutas duplicadas a tu variable PATH? Debes haber editado uno de tus
.
archivos. (.tcshrc
, o.bashrc
, etc. dependiendo de su sistema / shell particular). La forma de solucionarlo es editar el archivo nuevamente y eliminar las rutas duplicadas.Si no editó ningún archivo y debe haber modificado la RUTA de forma interactiva. En ese caso, los cambios no se "pegarán", es decir, si abre otro shell, o cierra sesión y vuelve a iniciar sesión, los cambios desaparecerán automáticamente.
Tenga en cuenta que también hay algunos archivos de configuración de todo el sistema, pero es poco probable que los haya modificado, por lo que lo más probable es que cambie los archivos en su directorio personal (si desea hacer esos cambios permanentes una vez que se establezca en un conjunto de rutas)
fuente
Para una plantilla fácil de copiar y pegar, uso este fragmento de Perl:
De esta manera, no necesita escapar de las barras para el operador sustituto.
fuente