¿Por qué la variable $PATH es diferente entre dos directorios?

¿Por qué la variable $PATH es diferente entre dos directorios?

Cuando estoy en un directorio y hago eco de la ruta

pwd
/Users/me/src/some_proj

echo $PATH
/Users/me/.gem/ruby/2.0.0/bin:/opt/boxen/chruby/versions/2.0.0-
p353/lib/ruby/gems/2.0.0/bin:/opt/boxen/chruby/versions/2.0.0-
p353/bin:bin:/opt/boxen/chruby/bin:/opt/boxen/ruby-
build/bin:node_modules/.bin:/opt/boxen/nodenv/shims:/opt/boxen/nodenv/bin:
/opt/boxen/bin:/opt/boxen/homebrew/bin:/opt/boxen/homebrew/sbin:
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin

Cuando estoy en un directorio diferente y hago eco de la ruta

pwd
/Users/me/src_personal/my_gems/som_gem

echo $PATH
bin:/opt/boxen/chruby/bin:/opt/boxen/ruby-build/bin:
node_modules/.bin:/opt/boxen/nodenv/shims:/opt/boxen/nodenv/bin:
/opt/boxen/bin:/opt/boxen/homebrew/bin:/opt/boxen/homebrew/sbin:
bin:/opt/boxen/chruby/bin:/opt/boxen/ruby-build/bin:
node_modules/.bin:/opt/boxen/nodenv/shims:/opt/boxen/nodenv/bin:
/opt/boxen/bin:/opt/boxen/homebrew/bin:/opt/boxen/homebrew/sbin:
bin:/opt/boxen/chruby/bin:/opt/boxen/ruby-build/bin:
node_modules/.bin:/opt/boxen/nodenv/shims:/opt/boxen/nodenv/bin:
/opt/boxen/bin:/opt/boxen/homebrew/bin:/opt/boxen/homebrew/sbin:
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin

Obtengo una $PATH diferente. Pensé que $PATH era una variable global en el shell que no cambia. ¿Por qué estas rutas son diferentes en diferentes directorios?

Respuesta1

Sé que esta es una pregunta antigua, pero recientemente algunos usuarios nuevos de Ruby tuvieron este comportamiento "aparentemente imposible". Estoy respondiendo para ayudar a otros que han tenido esto.

Es porque está utilizando Ruby, que aplica la configuración de gemas y paquetes locales para cada directorio. Tu variable RUTAescambiando simplemente debido a un comando cd, porque Ruby está manejando el cambio de cwd y aplicando la configuración correcta para ese directorio de destino (o la configuración global si no hay configuraciones en cwd) al ENV.

Un escenario muy común es que un usuario de Ruby ejecute el comando del paquete, que está claramente en la RUTA (pruebe qué paquete), cambie de directorio y luego haga que el comando del paquete sea desconocido (ya no está en la RUTA porque la RUTA cambió como parte efecto del comando cd).

Por lo general, esto se puede solucionar instalando gemas en el directorio problemático.

Respuesta2

No hay variables globales en el shell, es decir, variables compartidas entre diferentes instancias (procesos). Las variables exportadas se copian a procesos secundarios pero a partir de ahí son independientes.

información relacionada