Qual é o propósito do PATH?
É assim que seu shell encontra programas. Quando você digita ls
, por exemplo, que está executando um programa chamado ls
que reside na /bin
maioria dos sistemas, incluindo o Mac OS X. Seu shell só pode encontrar isso porque /bin
está no PATH
.
O shell procura por programas em PATH
ordem, da esquerda para a direita. Se houver dois ls
programas no seu sistema, e os diretórios deles estiverem no seu PATH
, ele encontrará aquele no diretório listado primeiro no seu PATH
.
Qual é a diferença entre / etc / caminhos e ~ / .bash_profile
Os caminhos definidos /etc/paths
são adicionados à PATH
inicialização em todos os shells no Mac OS X.
~/.bash_profile
é apenas um dos vários scripts de shell executados pelo Bash na inicialização e vários deles são específicos do Bash. Portanto, se você alterar seu shell - o Mac OS X também será enviado tcsh
e zsh
, por exemplo - alterações feitas para /etc/bashrc
não se aplicarem ao seu novo shell.
Além disso, /etc/paths
é um arquivo de configuração no nível do sistema, enquanto ~/.bash_profile
é por usuário. Se você tivesse vários usuários interativos configurados no seu Mac, não gostaria de adicionar diretórios aos /etc/paths
quais não deseja que apareçam nos de todos PATH
. O mesmo vale para /etc/bashrc
, exceto o curso que se aplica apenas aos usuários que usam o Bash como shell.
Qual é a diferença entre PATH e $ PATH e $ {PATH}?
Você geralmente vê apenas a variável sem o sigilo quando está definindo a variável. FOO=bar
define a FOO
variável de ambiente para a sequência bar
. Se você digitar set
, o shell mostrará todas as variáveis de ambiente e, nesse caso, você também verá a variável sem nenhum sinal.
$PATH
e ${PATH}
geralmente são intercambiáveis. Eles dizem ao shell para expandir o PATH
valor da variável atual no local. A diferença tem a ver com como e onde você os usa. Por exemplo:
$ FOO=bar
$ echo $FOO
bar
$ echo $FOOx
$ echo ${FOO}x
barx
No segundo echo
comando, o shell não imprime nada porque solicita que o shell imprima uma variável chamada FOOx
, que não existe; o shell trata variáveis inexistentes como vazias. Como o terceiro echo
usa a sintaxe entre chaves, ele permite que o shell veja que você está solicitando a FOO
variável e que esse x
é apenas outro caractere que você deseja imprimir imediatamente depois.
Há uma outra maneira de obter o mesmo efeito sem chaves, a propósito:
$ echo "$FOO"x
barx
As variáveis de ambiente são expandidas entre aspas duplas e as aspas separam a x
expansão da variável para que o shell faça a coisa certa.
Estou usando a FOO
variável de ambiente aqui apenas para maior clareza. Tudo o que escrevi acima se aplica também PATH
, pois é apenas outra variável de ambiente. Os textos de exemplo seriam apenas muito mais longos.
O que significa PATH de exportação? Quando exportamos?
Tomando o FOO
exemplo acima , se você executasse outro programa, ele não veria a FOO
variável porque não é exportada. Ele vive apenas nessa instância de shell:
$ echo $FOO
bar
$ bash
$ echo $FOO
$ exit
$ export FOO
$ bash
$ echo $FOO
bar
Quando executo um novo bash
shell com o que eu já estava usando e tento mostrar o valor de FOO
, fico em branco porque FOO
não foi exportado para os subprogramas. Então saí da segunda bash
instância, exportei, executei bash
novamente e agora a segunda instância vê o valor de FOO
.
Você usa export
quando deseja que os subprogramas vejam os valores definidos no shell e não usa quando não deseja que isso aconteça.
Normalmente, não exporto variáveis temporárias em scripts de shell, porque não quero que elas alterem como os programas são executados a partir desse script de shell.
Não vou responder a nenhuma de suas outras perguntas. Você só deve fazer uma pergunta de cada vez. Eu só respondi isso muitas vezes porque elas são vagamente relacionadas. Todo o resto pertence a uma pergunta separada.