O que é PATH
em um Mac OS? Eu o usei para instalar ferramentas globais de linha de comando, mas a única documentação que encontrei são tutoriais para fazer exatamente isso, sem nenhuma explicação real do que está acontecendo sob o capô. Também não encontrei uma página relevante na Wikipedia .
Então, qual é o objetivo da PATH
e qual é a diferença entre /etc/paths
e ~/.bash_profile
**?
Por exemplo, no meu paths
arquivo, vejo o seguinte:
/usr/bin /bin /usr/sbin /sbin /usr/local/bin
Mas em meu ~/.bash_profile
, Vejo o seguinte:
# Setting PATH for Python 2.7 # The orginal version is saved in .bash_profile.pysave PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}" export PATH
Isso é apenas uma adição específica do usuário ao arquivo paths
? “é tudo aquilo em paths
, como /usr/bin
?
Comentários
- Por favor, ‘ não combine várias perguntas em uma única postagem. Cada uma de suas perguntas seria bem-vinda aqui separadamente, mas não todas juntas desta forma. Reduza isso a uma única pergunta, você pode combinar 1 e 2, mas as outras não têm nada a ver com PATH especificamente. 3 é respondido aqui 4 é explicado aqui e 5 não faz muito sentido I ‘ estou com medo. Nem sua pergunta bônus, quais arquivos são binários? Scripts, não.
- Eu editei minha pergunta. Além disso, achei esses links úteis. Obrigado.
Resposta
1. Qual é a finalidade do PATH?
PATH
é uma variável de ambiente que contém uma lista separada por dois pontos de diretórios onde seu shell irá procurar por executáveis nomeados na linha de comando sem fornecer um caminho explícito para eles (como em seu jsdoc
exemplo). Assim, se o seu PATH
tiver
/usr/bin:/bin:/home/bin
então qualquer executável que você chamar pelo nome será pesquisado nesses diretórios (nessa ordem) e o primeiro executável encontrado é o executado.
2. Qual é a diferença entre / etc / path e ~ / .bash_profile
De acordo com esta questão em ServerFault , /etc/paths
é usado para definir PATH
globalmente (ou seja, todo o sistema, para todos os usuários) enquanto ~/.bash_profile
é usado para definir as preferências por usuário (onde ~
será o diretório inicial do usuário). O que está escrito em .bash_profile
pode adicionar ao PATH
global de /etc/paths
ou substituí-lo completamente.
Para o registro, /etc/paths
parece ser uma peculiaridade do MAC OS: não o encontrei no GNU / Linux, pelo menos.
Comentários
Resposta
Qual é a finalidade do PATH?
É como seu shell encontra programas. Quando você digita ls
, por exemplo, isso está executando um programa chamado ls
que reside em /bin
na maioria dos sistemas, incluindo Mac OS X. Seu shell só pode descobrir isso porque /bin
está no PATH
.
O shell procura programas na PATH
ordem, da esquerda para a direita. Se houver dois ls
programas em seu sistema e seus diretórios estiverem ambos em seu PATH
, encontrará aquele no diretório listado primeiro em seu PATH
.
Qual é a diferença entre / etc / path e ~ / .bash_profile
Os caminhos definidos em /etc/paths
são adicionados ao PATH
em 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 — Mac OS X também será enviado tcsh
e zsh
, por exemplo, — alterações feitas em /etc/bashrc
não se aplicam 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 em seu Mac, não gostaria de adicionar diretórios a /etc/paths
que não queria que aparecessem em todos “s PATH
. O mesmo é verdadeiro para /etc/bashrc
, exceto que, é claro, isso se aplica apenas a usuários que usam Bash como shell.
Qual é a diferença entre PATH e $ PATH e $ {PATH}?
Você normalmente só vê o variável sem o sigilo quando você está configurando a variável. FOO=bar
define a FOO
variável de ambiente para a string bar
. Se você digitar set
, o shell mostra todas as variáveis de ambiente e, nesse caso, você também vê a variável sem qualquer sigilo.
$PATH
e ${PATH}
são geralmente intercambiáveis. Dizem ao shell para expandir a PATH
variável atual ” s valor in-loco. 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 as variáveis inexistentes como vazias. Porque o terceiro echo
usa a sintaxe de chaves , permite que o shell veja que você está solicitando a variável FOO
e que x
é apenas outro caractere que você deseja imprimir imediatamente após .
Há outra maneira de obter o mesmo efeito sem chaves, a propósito:
$ echo "$FOO"x barx
Variáveis de ambiente são expandidas em aspas duplas e as aspas separam o x
da expansão da variável para que o shell faça a coisa certa.
Estou usando o FOO
variável de ambiente aqui apenas para fins de clareza. Tudo que escrevi acima se aplica também a , uma vez que é apenas mais uma variável de ambiente. Os textos de exemplo seriam muito mais longos.
O que significa exportar PATH? Quando exportamos?
Tomando o FOO
exemplo acima, se você fosse executar outro programa, não veria a variável FOO
porque ela não é exportada. Ela reside apenas naquela instância de shell:
$ echo $FOO bar $ bash $ echo $FOO $ exit $ export FOO $ bash $ echo $FOO bar
Quando eu executo pela primeira vez um novo bash
shell sob o que já estava usando, tente mostrar o valor de FOO
, eu obtenha um espaço em branco porque FOO
não foi exportado para visualização de subprogramas. Então, saí da segunda bash
instância, exportei-a, executei bash
novamente e agora a segunda instância vê o valor de FOO
.
Use export
quando quiser que os subprogramas vejam os valores definidos no shell e não os use quando você não quer que isso aconteça.
Normalmente, eu não exporto variáveis temporárias em scripts de shell, porque não quero que mudem como os programas executados a partir desse script de shell se comportam.
Não vou responder a nenhuma de suas outras perguntas. Você só deve fazer uma pergunta por vez. Só respondi a essas muitas porque são vagamente relacionadas. Todo o resto pertence a uma questão separada.
/etc/paths
no OSX.