O que é o PATH em um Mac OS?

5

Qual é o PATH em um Mac OS? Eu usei-o para instalar as ferramentas de linha de comando globais, mas a única documentação que eu encontrei são tutoriais para fazer exatamente isso, sem uma explicação real do que está acontecendo sob o capô. Eu também não encontrei uma página relevante em Wikipedia .

Qual é o objetivo de PATH e qual é a diferença entre /etc/paths e ~/.bash_profile **?

Por exemplo, no meu arquivo paths , vejo isto:

/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

Mas no meu ~/.bash_profile , vejo isto:

# 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 para o arquivo paths ? O que é tudo isso em paths , como /usr/bin ?

    
por gwg 29.01.2014 / 23:18

2 respostas

8

1. Qual é o propósito do PATH?

PATH é um variável de ambiente que contém uma lista separada por vírgulas de diretórios onde seu shell irá procurar executáveis que você nomeia na linha de comando sem fornecer um caminho explícito para eles (como em seu jsdoc example) . Assim, se o seu PATH tiver

/usr/bin:/bin:/home/bin

então, qualquer executável chamado por nome será procurado nesses diretórios (nessa ordem) e o primeiro executável encontrado será aquele executado.

2. Qual é a diferença entre / etc / paths e ~ / .bash_profile

De acordo com esta pergunta no ServerFault , /etc/paths é usado para definir PATH globalmente (ou seja, em todo o sistema, para todos os usuários) enquanto ~/.bash_profile é usado para definir preferências por usuário (em que ~ será o diretório inicial do usuário). O que está escrito em .bash_profile pode adicionar ao global PATH de /etc/paths ou substituí-lo completamente.

Para o registro, /etc/paths parece ser uma peculiaridade do MAC OS: eu não o encontrei no GNU / Linux, pelo menos.

    
por 29.01.2014 / 23:41
4

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.

    
por 29.01.2014 / 23:59

Tags