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.