Obtengo bashrc de algunos de mis amigos. Así que termino teniendo entradas duplicadas en mi variable $ PATH. No estoy seguro de si ese es el problema para los comandos que tardan mucho en iniciarse. ¿Cómo funciona $ PATH internamente en bash? ¿Tener más CAMINOS ralentiza mi tiempo de inicio?
45
zsh
, es tan simple comotypeset -aU path
, FWIW .Respuestas:
Tener más entradas
$PATH
no ralentiza directamente su inicio, pero se ralentiza cada vez que ejecuta un comando en particular en una sesión de shell (no cada vez que ejecuta el comando, porque bash mantiene un caché). La ralentización rara vez es perceptible a menos que tenga un sistema de archivos particularmente lento (por ejemplo, NFS, Samba u otro sistema de archivos de red, o en Cygwin).Las entradas duplicadas también son un poco molestas cuando
$PATH
revisas tu visualmente, tienes que atravesar más cruft.Es bastante fácil evitar agregar entradas duplicadas.
Nota al margen: obtener el script de shell de otra persona significa ejecutar el código que ha escrito. En otras palabras, le está dando a sus amigos acceso a su cuenta cuando lo deseen.
Nota al margen:
.bashrc
no es el lugar correcto para establecer$PATH
ni ninguna otra variable de entorno. Las variables de entorno deben establecerse~/.profile
. Consulte ¿Qué archivos de configuración deben usarse para configurar variables de entorno con bash? , Diferencia entre .bashrc y .bash_profile .fuente
case :$PATH:
y nocase $PATH
para que coincida incluso si la entrada es la primera o la última.He visto a personas limpiar duplicados de su variable PATH usando
awk
y algo como esto:Puede intentar agregar eso a su propio bashrc y asegurarse de obtener los otros archivos en algún lugar antes de ejecutarlo.
Una alternativa sería usar la
pathmerge
utilidad.En cuanto a su problema de velocidad, esto no afectará el tiempo de inicio del shell de manera significativa, pero puede ahorrar algo de tiempo al completar la pestaña para los comandos, especialmente cuando el comando no se encuentra en la ruta y realiza búsquedas repetidas a través del mismo carpetas buscándolo.
Una nota sobre seguridad: realmente deberías prestar atención a las advertencias de Gilles sobre seguridad aquí. Al obtener un archivo propiedad de otro usuario, le está dando un pase gratuito a esos usuarios para que ejecuten su propio código como usuario cada vez que inicie un shell. Si no confías en esos usuarios con tu contraseña, no deberías buscar sus archivos shell.
fuente
PATH=$(echo "$PATH" | awk -v RS=':' -v ORS=":" '!a[$1]++{if (NR > 1) printf ORS; printf $a[$1]}')
:
no es solo un problema cosmético. Es lo mismo que agregar.
a su camino, que es potencialmente peligroso.Según la respuesta de @Gilles, puede envolverlo en una función para minimizar la escritura:
fuente
Solo
$PATH
se ejecuta la primera coincidencia , por lo que las entradas posteriores no se procesan después de eso. Es por eso que a veces debe revisar el orden de las entradas en su$PATH
para que su entorno se comporte como se espera.Para responder a su pregunta: esta no debería ser la causa del inicio lento.
fuente
TAB
? En ese caso, debe verificar si no completa la definicióncomplete -c which -a
. Deberías eliminar el-a
parámetro. Se puede comprobar que al emitir el comando:complete | grep which
.Para evitar entradas duplicadas en mi RUTA, tuve que poner lo siguiente en AMBOS ~ / .bash_profile y ~ / .bashrc:
El principal inconveniente es que clasifica las entradas de RUTA, pero creo que puedo vivir con eso.
fuente