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

2

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 diferente e caminho de eco

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. Eu pensei que $ PATH fosse uma variável global no shell que não muda. Por que esses caminhos são diferentes em diretórios diferentes?

    
por User314159 06.05.2014 / 08:00

2 respostas

3

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

É porque você está usando o ruby - que está aplicando configurações locais de pacotes configuráveis e gem para cada diretório. Sua variável PATH está mudando simplesmente devido a um comando cd - porque ruby está manipulando a mudança cwd e aplicando as configurações corretas para aquele diretório de destino (ou configurações globais se não houver configurações em cwd) para o ENV .

Um cenário muito comum é que um usuário ruby executará o comando bundle, que está claramente no PATH (tente qual pacote), altere os diretórios e tenha o comando bundle como desconhecido (não mais no PATH porque o PATH mudou) como um efeito colateral do comando cd).

geralmente isso pode ser solucionado com a instalação gem no diretório problemático.

    
por 06.04.2017 / 22:35
1

Não há 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.

    
por 06.05.2014 / 08:48

Tags