¿Duplicar inputs en $ PATH un problema?

Me bashrc fuente de algunos de mis amigos. Así que termino teniendo inputs duplicadas en mi variable $ PATH. No estoy seguro de si ese es el problema para que los commands tarden en comenzar. ¿Cómo funciona $ PATH internamente en bash? ¿Tener más PATHS networkinguce mi time de inicio?

Tener más inputs en $PATH no ralentiza directamente su inicio, pero se ralentiza cada vez que ejecuta un command en particular en una session de shell (no cada vez que ejecuta el command, porque bash mantiene un caching). La ralentización raramente es perceptible a less que tenga un sistema de files particularmente lento (por ejemplo, NFS, Samba u otro sistema de files de networking, o en Cygwin).

Las inputs duplicadas también son un poco molestas cuando revisa su $PATH visualmente, tiene que caminar a través de más cruft.

Es bastante fácil evitar agregar inputs duplicadas.

 case ":$PATH:" in *":$new_entry:"*) :;; # already there *) PATH="$new_entry:$PATH";; # or PATH="$PATH:$new_entry" esac 

Nota al margen: get 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 count cuando lo desean.

Nota al .bashrc : .bashrc no es el lugar correcto para establecer $PATH o cualquier otra variable de entorno. Las variables de entorno deben establecerse en ~/.profile . Consulte ¿Qué files de configuration se deben usar para configurar variables de entorno con bash? , Diferencia entre .bashrc y .bash_profile .

He visto personas limpiar duplicates de su variable PATH usando awk y algo como esto:

 PATH=$(echo "$PATH" | awk -v RS=':' -v ORS=":" '!a[$1]++') 

Puede intentar agregar eso a su propio bashrc y asegurarse de que el origen de los otros files en algún lugar antes de ejecutar eso.

Una alternativa sería usar la utilidad pathmearge .

En cuanto a su problema de velocidad, esto no afectará significativamente el time de inicio del shell, pero puede ahorrar algo de time completar la tabulación de los commands, especialmente cuando el command no se encuentra en la ruta y realiza búsquedas repetidas a través del mismo carpetas que lo buscan.

Una nota sobre security: Deberías prestar atención a las advertencias de Gilles sobre la security aquí. Al search un file propiedad de otro usuario, le está dando un pase libre a esos usuarios para que ejecuten su propio código como usuario cada vez que inicie un shell. Si no confía en esos usuarios con su contraseña, no debería get sus files de shell.

Solo se ejecuta la primera coincidencia en $PATH , por lo que las inputs subsiguientes no se procesan después de eso. Es por eso que a veces debe revisar el order de las inputs en su $PATH para que su entorno se comporte como se esperaba.

Para responder a su pregunta: esta no debería ser la causa de un arranque lento.

Según @Gilles answer, puede envolverlo en una function para minimizar el tipeo:

 function addToPATH { case ":$PATH:" in *":$1:"*) :;; # already there *) PATH="$1:$PATH";; # or PATH="$PATH:$1" esac } addToPATH /Applications/AIRSDK_Compiler/bin addToPATH ~/.local/lib/npm/bin