O que a linha PATH de exportação em .bashrc faz?

9

Não gosto muito de Linux e tenho a seguinte dúvida após um tutorial.

Eu tenho que modificar o bashrcarquivo. Que tipo de configurações estão contidas neste arquivo? Acho que algo relacionado ao ambiente do shell bash, mas não tenho tanta certeza disso.

Eu tenho que inserir esta linha:

export PATH=$HOME/.local/bin:$HOME/.local/usr/bin:$PATH

O que exatamente esta linha?

Eu acho que essa exportdeclaração é usada para criar uma nova variável, tornando-a disponível para outro programa.

Mas o que exatamente esta linha? O PATHnome da variável que estou definindo? O que é $HOME?

O que significa o :símbolo entre PATH=$HOME/.local/bine $HOME/.local/usr/bine $PATHseção na expressão anterior?

O que exatamente essa expressão significa?

AndreaNobili
fonte
O: entre os itens é o separador para cada segmento. Sem ele, seu caminho seria uma corrida contínua e não funcionaria.
Terrance
No Ubuntu, esse tipo de PATHmodificação já foi feita no ~/.profilearquivo, por isso é um pouco inconsistente fazer coisas semelhantes ~/.bashrc. Melhor IMO para modificar o código já existente, ~/.profilese necessário. Atualmente, o ~/.profilearquivo padrão inclui esta linha:PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Gunnar Hjalmarsson
@GunnarHjalmarsson: Existem algumas situações que tornam .profile e .bashrc diferentes. O arquivo .profile é analisado por shells de logon e não por subshells. Mas já que você precisa fazer o login de qualquer maneira para iniciar um subshell, isso é bom, pois os subshells herdarão o $ PATH. O arquivo .bashrc não será analisado pelo shell de logon, mas será analisado por subshells. A diferença ocorre quando você tem algumas coisas que não são filhos de shells de login (talvez algum script de automação sofisticado que chame outros scripts como git commit hook) - qualquer coisa no .profile não será lida e será ignorada
slebetman
@slebetman: Certo, e no caso de uma área de trabalho, há outra diferença que você não menciona: ao contrário ~/.bashrc, ~/.profileé feita pelo gerenciador de exibição, portanto, apenas as variáveis ​​definidas ~/.profileestão disponíveis quando você inicia os programas a partir do ambiente gráfico. E isso acontece cedo, por isso deve ser bom para processos iniciados automaticamente para a sessão.
Gunnar Hjalmarsson

Respostas:

16

Para recapitular tudo mencionado nesta pergunta,

A exportparte

A exportlinha significa que a variável que você declara depois estará acessível aos processos filho. Em outras palavras, os processos poderão acessar a variável declarada após a exportpalavra-chave através do ambiente do shell. Portanto, se você fez algo assim export FOO="BAR"e depois originou as alterações no seu ambiente de shell, você pode digitar $FOOe obter BAR.

A PATHparte

A linha do caminho é exatamente como você declarou: está declarando uma variável chamada PATHpara o ambiente do shell. No ambiente do bash, PATHtem um objetivo especial de definir onde o computador procura por programas. Isso permite digitar comandos personalizados para scripts sem digitar o diretório completo. Observe que PATH está marcado para exportação por padrão, portanto, essa linha não precisa ser reescrita. Não dói, no entanto.

O $HOMEna PATHvariável

No início do caminho atribuído à PATHvariável, $HOMEé declarado. Isso significa que o computador irá capturar o valor armazenado HOMEe copiá-lo e copiá-lo na frente do resto da linha ao lê-lo.

O :entre os dois caminhos

O :é equivalente a uma vírgula nas frases. Apenas separa os três diretórios. Sem esses três diretórios, o console não reconheceria os comandos que recebe. Esses três locais são os três diretórios mais comumente usados ​​para armazenar arquivos de scripts / comandos e, portanto, devem ser acessíveis pelo terminal sem precisar escrever o caminho completo para o arquivo.

TheOdd
fonte
Ótima resposta! "A linha de exportação significa que a variável que você declara depois que estará acessível aos processos filho" é o pai desse filho que processa o terminal de onde executarei um comando?
23719 vadasambar
5

A PATHvariável permite ao bash saber onde procurar programas executáveis; portanto, se você tiver um script ou outro arquivo executável $HOME/.local/bin, a modificação PATHpermitirá digitar e executar esse arquivo da mesma forma que você faz com lsou df.

exportsignifica apenas disponibilizar essa PATHvariável para outros programas executados a partir do bash.

Quanto a : , é apenas um separador para cada diretório. É o mesmo que uma vírgula em uma lista de palavras, nada mais.

Sergiy Kolodyazhnyy
fonte