¿Tmux "clasifica" la variable PATH?


14

Tengo un problema reproducible:

  1. configurar mi RUTA en Bash .profile
  2. iniciar tmux por tmux, tmux attacho cualquier variante
  3. echo $ PATH y míralo con los mismos componentes pero en diferente orden

¿Cómo detener esto? ¿Qué lo explica?

Respuestas:


29

Si está en una Mac y se ha estado preguntando por qué /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/binsigue prefiriéndose a PATH cuando ejecuta tmux, es debido a una utilidad llamada path_helper que se ejecuta desde su /etc/profilearchivo.

No puede persuadir fácilmente a tmux (o mejor dicho, bash) para que no /etc/profilelo haga (por alguna razón, tmux siempre se ejecuta como un shell de inicio de sesión, lo que significa que se leerá / etc / profile), pero puede asegurarse de que los efectos de path_helper no No jodas con tu RUTA.

El truco es asegurarse de que PATH esté vacío antes de que se ejecute path_helper. En mi ~/.bash_profilearchivo tengo esto:

if [ -f /etc/profile ]; then
    PATH=""
    source /etc/profile
fi

Borrar la RUTA antes de que se ejecute path_helper evitará que anteponga la RUTA predeterminada a su RUTA (previamente) elegida, y permitirá que el resto de sus scripts de configuración de bash personal (comandos más abajo .bash_profile, o .bashrcsi lo ha obtenido .bash_profile) para configurar su RUTA en consecuencia.

Espero que tenga sentido ...


1
¡Esto lo hizo totalmente por mí! Lo tengo escondido detrás de una if [ -n "$TMUX" ]cláusula, pero me preguntaba: ¿qué tan importante es [ -f /etc/profile ]realmente? ¿No es seguro asumir que /etc/profilesiempre es un archivo normal?
Ryan Lue

1
@RyanLue Se podría sustituir cómodamente -fcon -e, pero no me gustaría probar personalmente y la fuente de un archivo de un script que se ejecute cuando me conecto a menos que yo había comprobado que estaba allí. Sin embargo, tiendo a reutilizar mi script bash en muchas máquinas diferentes (y sistemas operativos), así que me gusta asegurarme de que sean a prueba de balas. Me imagino que algunas otras variantes de Unix podrían llamarlo de otra manera.
Graham Ashton

¡GRACIAS! Esto me estaba volviendo loco, y poner ese pequeño fragmento en la parte superior de mi ~/.bash_profilecordura trajo de vuelta a mi feliz mundo tmux.
hoosierEE

Si usted no quiere meterse con valores predeterminados del sistema, set -g default-command "${SHELL}"en .tmux.conflas fuerzas TMux usar conchas de no ingreso. No veo el punto en esos de todos modos, ya que generalmente abres tmux después de que ya has iniciado sesión.
seeker_of_bacon

5

No; ordenar $PATHsería una locura, ya que muchos sistemas dependen de su orden establecido por el usuario.

Sin embargo, tmux qué empezar su shell en el modo de "inicio de sesión", causando ~/.profileque obtenerse de nuevo . Esto significa que si tiene algo como PATH=/my/dir:/another/dir:$PATHen ese archivo, se volverá a hacer , lo que dará como resultado $ PATH /my/dir:/another/dir:/my/dir:/another/dir:(etc.). Para evitar esto, puede usar otra variable para verificar:

if [ "$_SKIP_PROFILE" ]; then
    return 0
else
    export _SKIP_PROFILE=y
fi

export PATH="/my/dir:/another/dir:$PATH"

0

@Graham Ashton Gracias por tu idea

Mi sugerencia sería que pongas

if [ -f /etc/profile ]; then
    PATH=""
    source /etc/profile
fi

en su archivo .zshrc en la parte superior de la misma.

ASEGÚRESE de que su

export NVM_DIR="$HOME/.nvm"
. "/usr/local/opt/nvm/nvm.sh"

Esta abajo.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.