Por que a variável $PATH é diferente entre dois diretórios?

Por que a variável $PATH é diferente entre dois diretórios?

Quando estou em um diretório e caminho de eco

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

Quando estou em um diretório e caminho de eco diferente

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

Eu recebo um $PATH diferente. Achei que $PATH fosse uma variável global no shell que não muda. Por que esses caminhos são diferentes em diretórios diferentes?

Responder1

Eu sei que esta é uma questão antiga, mas recentemente alguns novos usuários de Ruby atingiram esse comportamento "aparentemente impossível". Estou respondendo para ajudar outras pessoas que acertaram isso.

É porque você está usando Ruby - que aplica configurações locais de pacote e gem para cada diretório. Sua variável PATHémudando simplesmente devido a um comando cd - porque Ruby está lidando com a alteração do cwd e aplicando as configurações corretas para esse diretório de destino (ou configurações globais se não houver configurações no cwd) ao ENV.

Um cenário muito comum é que um usuário Ruby execute o comando bundle, que está claramente no PATH (tente qual pacote), altere os diretórios e então faça com que o comando bundle seja desconhecido (não está mais no PATH porque o PATH mudou como um lado efeito do comando cd).

geralmente isso pode ser remediado com gem install no diretório problemático.

Responder2

Não existem variáveis ​​globais no shell, ou seja, variáveis ​​compartilhadas entre diferentes instâncias (processos). As variáveis ​​exportadas são copiadas para processos filhos, mas a partir daí são independentes.

informação relacionada