Qual é o propósito do PATH?
É assim que seu shell encontra programas. Quando você digita ls, por exemplo, que está executando um programa chamado lsque reside na /binmaioria dos sistemas, incluindo o Mac OS X. Seu shell só pode encontrar isso porque /binestá no PATH.
O shell procura por programas em PATHordem, da esquerda para a direita. Se houver dois lsprogramas 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/pathssão adicionados à PATHinicializaçã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 tcshe zsh, por exemplo - alterações feitas para /etc/bashrcnã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/pathsquais 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=bardefine a FOOvariá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.
$PATHe ${PATH}geralmente são intercambiáveis. Eles dizem ao shell para expandir o PATHvalor 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 echocomando, 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 echousa a sintaxe entre chaves, ele permite que o shell veja que você está solicitando a FOOvariá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 xexpansão da variável para que o shell faça a coisa certa.
Estou usando a FOOvariá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 FOOexemplo acima , se você executasse outro programa, ele não veria a FOOvariá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 bashshell com o que eu já estava usando e tento mostrar o valor de FOO, fico em branco porque FOOnão foi exportado para os subprogramas. Então saí da segunda bashinstância, exportei, executei bashnovamente e agora a segunda instância vê o valor de FOO.
Você usa exportquando 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.