O que é PATH em um Mac OS?

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

  • Acabei de editá-los, mas obrigado por responder a todos eles!
  • @ggundersen Cortei minha resposta para caber em sua pergunta editada.
  • @ggundersen você também pode querer ler minha resposta e th e links nele sobre /etc/paths no OSX.

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.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *