What is the purpose of PATH?
É assim que o seu shell encontra programas. Quando você digita ls , por exemplo, está executando um programa chamado ls , que vive em /bin na maioria dos sistemas, incluindo o Mac OS X. Seu shell só consegue encontrar porque /bin está no PATH .
O shell pesquisa programas em PATH order, da esquerda para a direita. Se houver dois programas ls em seu sistema e seus diretórios estiverem no seu PATH , ele encontrará o diretório listado primeiro em PATH .
What is the difference between /etc/paths and ~/.bash_profile
Os caminhos definidos em /etc/paths são adicionados à PATH na inicialização de 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 envia tcsh e zsh , por exemplo - as alterações feitas em /etc/bashrc não se aplicam ao 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 em seu Mac, não desejaria adicionar diretórios a /etc/paths que você não queria que aparecessem em PATH de todos. O mesmo vale para /etc/bashrc , exceto que, é claro, isso se aplica apenas a usuários que usam o Bash como shell.
What is the difference between PATH and $PATH and ${PATH}?
Você normalmente só vê a variável sem o sigilo quando está configurando a variável. FOO=bar define a variável de ambiente FOO como a string 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 sigilo.
$PATH e ${PATH} são geralmente intercambiáveis. Eles dizem ao shell para expandir o valor atual da variável PATH 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 comando echo , o shell não imprime nada porque pede ao shell para imprimir uma variável chamada FOOx , que não existe; o shell trata variáveis inexistentes como vazias. Como o terceiro echo usa a sintaxe de chave de caracteres, ele permite que o shell veja que você está solicitando a variável FOO e que o x é apenas outro caractere que você deseja imprimir imediatamente a seguir.
Existe 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 aspas separam o x da expansão da variável, de modo que a casca faz a coisa certa.
Estou usando a variável de ambiente FOO aqui apenas para maior clareza. Tudo o que escrevi acima se aplica igualmente a PATH , já que é apenas outra variável de ambiente. Os textos de exemplo seriam muito mais longos.
What does export PATH mean? When do we export?
Tomando o exemplo acima de FOO , se você executasse outro programa, ele não veria a variável FOO porque ela não é exportada. Ele vive apenas dentro dessa instância de um shell:
$ echo $FOO
bar
$ bash
$ echo $FOO
$ exit
$ export FOO
$ bash
$ echo $FOO
bar
Quando executo pela primeira vez um novo shell bash abaixo do que eu já estava usando, tente mostrar o valor de FOO , obtenho um espaço em branco porque FOO não foi exportado para subprogramas para ver . Em seguida, saí da segunda bash instance, exportei-a, executei bash novamente e agora a segunda instância vê o valor de FOO .
Você usa export quando quiser que subprogramas ver os valores definidos no shell e não os use quando não quiser que isso aconteça.
Normalmente, não exporto variáveis temporárias em scripts de shell, porque não quero que eles modifiquem como os programas executados a partir desse script de shell se comportam.
Não vou responder a nenhuma das suas outras perguntas. Você só deveria fazer uma pergunta de cada vez. Eu só respondi isso porque eles estão vagamente relacionados. Tudo o resto pertence a uma questão separada.