Qual é a diferença entre "echo $ PATH" e / etc / caminhos?

10

Quando eu echo $ PATH fico com esta: Users/myusername/.node_modules_global/bin:/Users/mac/.node_modules_global/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/mac/Library/Android/sdk/platform-tools:/platform-tools.

Quero remover alguns caminhos disso, mas quando abro o arquivo usando o comando vim /etc/paths, obtenho os seguintes resultados:

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

O arquivo / etc / caminhos é diferente da variável $ PATH?

level0
fonte
Qual versão do OS X? Eu não tenho /etc/pathsna minha, mas eu estou correndo 10.4.11e as coisas provavelmente mudaram desde então
Fox
1
Mas de acordo com uma resposta sobre AskDifferent , /etc/pathsé usado para gerar o padrão $PATH, que você pode modificar posteriormente
Fox
É o padrão. Até o momento usuário inicia sua concha, porém, seria modificado por outros arquivos que a Shell fontes, como ~/.bashrcou~/.profile
Sergiy Kolodyazhnyy

Respostas:

14

/etc/pathsfaz parte do que é usado para configurar $PATHprocessos de shell. Quando você abre uma nova janela do Terminal, ela inicia bash, executando vários scripts de inicialização: /etc/profileAND ~/.bash_profileOR (se isso não existir) ~/.bash_loginOR (se isso também não existir) ~/.profile. Esses scripts configuram o ambiente do shell, inclusive $PATH.

Uma das coisas que /etc/profilefaz é executar /usr/libexec/path_helper, que lê /etc/pathstodos os arquivos /etc/paths.de adiciona seu conteúdo $PATH. Mas este é apenas um ponto de partida; seu próprio script de inicialização (se houver algum) pode adicionar $PATH, editar, substituir completamente etc.

Parece-me que seu script de inicialização (e / ou coisas que ele executa) está adicionando um número de entradas ao conjunto básico de onde ele recebe /etc/paths. "Users / myusername / .node_modules_global / bin: /Users/mac/.node_modules_global/bin:" é adicionado ao início de $PATH(o que significa que esses diretórios serão pesquisados ​​primeiro) e ": / Users / mac / Library / Android / sdk / platform-tools: / platform-tools "é adicionado no final. Se você quiser saber exatamente o que os está adicionando, verifique o script de inicialização.

BTW, esse processo de configuração se $PATHaplica somente aos shells "login" do bash. Qualquer coisa executada por um shell bash será herdada $PATHdele, portanto, provavelmente terá essencialmente a mesma coisa. Os shells bash sem login seguem um processo de configuração um pouco diferente. Outros shells e coisas que não foram iniciadas a partir de um shell (por exemplo, tarefas cron) podem ser completamente diferentes $PATHs.

Gordon Davisson
fonte
Observe que para shells que não são de login (por exemplo, /usr/local/bin/bashcomo instalado por brew, sem o -largumento), /usr/libexec/path_helpernão é usado e /usr/local/binnão é incluído por padrão no $PATH. Para usar path_helperem um script ou interativamente, o comando é eval $(/usr/libexec/path_helper).
Kyle Strand
0

Os primeiros lugares que eu procuraria para verificar modificações são:

~/.profile
~/.bashrc
~/.bash_profile

Se você estiver usando algo que não é o Bash, verifique os arquivos de configuração para ver qualquer menção ao PATH.

rovr138
fonte