Onde está definida a variável $ PATH em todo o sistema?

10

Estou usando o Ubuntu Desktop 14.04 e, como tal, estou usando o shell que não é de login. Quando abro o terminal da GUI, primeiro as sessões do shell sem logon leem os seguintes arquivos de inicialização:

/etc/bash.bashrc
~/.bashrc

Os shells sem logon herdam o ambiente do processo pai, que é um shell de logon, portanto, a sessão também lê os seguintes arquivos de inicialização:

/etc/profile
~/.bash_profile

No entanto, não consigo encontrar o $PATHpara caminhos de todo o sistema como /bin, /sbin, /usr/bin, /usr/sbin, jogo em qualquer um desses arquivos. Onde está o $PATHconjunto desses diretórios?

Donato
fonte

Respostas:

16

O sistema (padrão) em todo o sistema PATHé definido no /etc/environmentarquivo.

$ cat /etc/environment 
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

É basicamente o lugar para salvar as variáveis ​​de ambiente global.

heemail
fonte
+1, no entanto, você sabe se $PATHé herdado pelo shell de login pai ou se é recarregado por cada bashinstância?
kos
@kos Todos os processos filhos herdam o ambiente de shell pai, a menos de ser claro de execução em um ambiente modificado ..
heemayl
Percebo que o shell não parece expandir a $HOMEvariável. Por exemplo, adicionar $HOME/.composer/vendor/binao PATHin /etc/environmentnão permite que os binários neste diretório sejam executados sem um prefixo de caminho. O uso ~/.composer/vendor/bintambém não funciona. Eu estou achando que é necessário adicionar o caminho absoluto, por exemplo: /home/vagrant/.composer/vendor/bin. Este parece estar relacionada (embora não explica este comportamento): askubuntu.com/questions/402353/...
Ben Johnson
2
@ BenJohnson Isso é simplesmente porque /etc/environment(e ~/.pam/environment) é lido pelo pam_envmódulo PAM, não pelo shell ou qualquer outra coisa que entenda as variáveis ​​de ambiente / shell; o mesmo vale para ~expansão. Então, você precisa usar o caminho absoluto lá.
heemayl