Eu sou muito novo no Linux e coloquei o seguinte comando no final do arquivo .profile
na minha pasta pessoal:
export PATH="~/.composer/vendor/bin:$PATH"
Conheço um pouco os problemas das variáveis de ambiente e seus valores no Windows, mas, neste caso, quero entender o que esse comando faz e quais são as partes que ele compreende:
O que é essa frase de "exportação" no início? Está exportando os dados para estarem disponíveis para o Bash?
Qual é o primeiro
PATH
e o que é o segundo$PATH
, e por que precisamos de dois?
command-line
bash
environment-variables
JohnDoea
fonte
fonte
export
comando, porque aPATH
variável já está marcada como exportada. (Experimente as duas coisas se você não acredita em mim!)Respostas:
export
é um comando (mais precisamente, é um built-in do Bash , ou seja, não é um presente executávelPATH
, é um comando que o Bash possui por si só).export
define a variável de ambiente no lado esquerdo da atribuição como o valor no lado direito da atribuição; essa variável de ambiente é visível para o processo que a define e para todos os subprocessos gerados no mesmo ambiente, ou seja, neste caso para a instância do Bash que origina~/.profile
e para todos os subprocessos gerados no mesmo ambiente (que podem incluir, por exemplo, outras conchas , que por sua vez poderá acessá-lo).O primeiro,
PATH
conforme explicado acima, é a variável de ambiente a ser definida usandoexport
.Como
PATH
normalmente contém algo quando~/.profile
é originário (por padrão, ele contém/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
), simplesmente definirPATH
como~/.composer/vendor/bin
fariaPATH
conter apenas~/.composer/vendor/bin
.Portanto, como as referências a uma variável em um comando são substituídas por (ou "expandidas" para) o valor da variável por Bash no momento da avaliação do comando ,
:$PATH
é colocado no final do valor a ser atribuído paraPATH
quePATH
acabe contendo~/.composer/vendor/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
( ou seja, o quePATH
já contém mais~/.composer/vendor/bin:
no início).fonte
https://help.ubuntu.com/community/EnvironmentVariables provavelmente o ajudará. Também
man bash
pode ser muito útil para entender como isso funciona (pelo menos no Bash)Enfim - quanto a
PATH=
você basicamente definir aPATH
variável, adicionar alguns novos caminhos para pesquisar, adicionar no final os caminhos já definidos / previamente, com$PATH
(que é basicamente uma referência àPATH
variável).Então, digamos que você
PATH
estava até agora definido como algo como:e então você define
seu
PATH
depois disso será como:Espero que faça sentido.
Além disso, você exporta a nova variável para que ela seja conhecida em seu ambiente, incluindo também processos / subshells filhos.
Lembre-se também de que a ordem dos diretórios configurados
PATH
pode ser importante. E algo comoPATH="$PATH:a:b:c"
lhe dará o resultado:que afetará a ordem dos diretórios / caminhos ao procurar por um comando (se você tiver seu comando em mais de um diretório, o primeiro encontrado será usado - o que pode gerar resultados inesperados algumas vezes).
fonte
Aqui está o comando para que todos possam acompanhar o andamento dos tópicos.
export PATH="~/.composer/vendor/bin:$PATH"
export
O/bin/export
comando interno do shell (o que significa que não existe , é uma coisa do shell) basicamente disponibiliza variáveis de ambiente para outros programas chamados a partir debash
(veja a questão vinculada em Extra Reading) e os subshells.PATH
variável posteriormente.$PATH
é aPATH
atribuição padrão (ou pelo menos a aparência da variável até esse comando aparecer no seu.bashrc
ou.profile
) e expanda-o.~/.composer/vendor/bin
vai expandir para/home/username/.composer/vendor/bin
, onde.composer
está a pasta oculta devido ao ponto inicial.~/.composer/vendor/bin:$PATH
agora se transformou em uma longa lista de pastas, separadas por:
. Tudo é colocado entre aspas duplas para incluir pastas com espaços no caminho.PATH
comandos variáveis e externos permitidos para usá-loExemplo Simples
Meu shell interativo é
mksh
, na verdade , o que também passou a serexport
incorporado. Ao usarexport
para definirVAR
, minha variável pode ser transmitida e usada por uma cadeia de comandos / subprocessos subsequentes, onde eu exportei a mesma variávelLeitura Extra
fonte
~
in~/.composer/vendor/bin
não será expandido! O til só é expandido em alguns lugares especiais, como logo após o=
sinal.PATH="~/.foo:$PATH"
resulta em~/.foo:/other/path/dirs...
. Mas~
seria expandidoPATH=~"/.foo:$PATH"
, o que resulta em/home/user/.foo:/other/path/dirs...
.Eu li aqui e em outros lugares da web, conversei com um amigo sobre isso e decidi que, como calouro (talvez mais calouro do Ubuntu do que alguns aqui possam pensar), eu deveria mapear este comando - eu deveria fazer um mapa e então aprenda o que é o paradeiro e o paradeiro:
Dados preliminares
Se por enquanto você não entendeu algo neste capítulo - não se preocupe, isso ficará mais claro à medida que você continua lendo, mas para entender esse assunto, você precisa ler sobre as variáveis de ambiente (EVs), seus valores e finalidade . Agora tentarei explicar o comando em palavras simples e em um método de mapeamento, para iniciantes como eu e apenas para iniciantes. Tentei fazer o meu melhor aqui ...
Mapeamento
O valor original do EV "PATH", como vem no Ubuntu 15.10, é:
No próprio comando note, temos duas frases PATH. O último é $ PATH - O $ diz "imprima o valor original ou valores do EV próximo a você"; O EV próximo a ele é o PATH EV.
Nós exportada a variável de caminho-se (tornou disponível para sub processos, bem como, IE processos que são executados na CLI que não são realmente o shell Bash, mas correr dentro dele (como Drush , que é o Drupal CLI).
Além da exportação, também a expandimos: A primeira frase PATH (PATH =) nos usou para adicionar um valor extra (~ / .composer / vendor / bin :) ao valor original (representado por $ PATH).
Os dois pontos (:) no final do novo valor que mencionei no parágrafo acima, usam para distinguir o novo valor do original.
"" São a área em que os valores residem.
O ~ é a pasta inicial.
Espero que, após esse mapeamento, o comando seja mais claro para calouros como eu.
fonte
O
export
comando disponibiliza variáveis em subshells. Ou seja, sem ela, a variávelPATH
não seria visível em sub-conchas.PATH
é mencionado duas vezes:=
sinal.=
sinal. Isso faz com que o valor antigo faça parte do novo valor.fonte
PATH
não seria visível em sub-conchas." Isso está incorreto;PATH
é uma variável de ambiente (que não é exatamente a mesma coisa que uma variável de shell ), portanto é exportada automaticamente e oexport
comando é desnecessário.setenv
comando.PATH
origina do ambiente, ele é exportado automaticamente, portanto, você não precisa executarexport
para que as alterações sejam propagadas para processos filho (ao contrário do que diz a página que você vinculou).PATH=foo
eexport PATH=foo
tenho comportamento idêntico.o
export
comando é um buildin do bash, significa que variáveis de exportação são variáveis de ambiente. (você pode digitarhelp export
para se inclinar mais(os caracteres seguem o comando são parâmetros, divididos por espaço, portanto, neste caso, existe apenas um parâmetro)
o
PATH
é o nome da variável, geralmente, varibale predefinido por bash, ser nomeado em maiúsculas.os
=
meios atribuem valor a essa variável.toda a string é o valor da varibale
o
$PATH
é um tipo de função do bash, nomeadovariable expantion
, o bash substituirá o valor do existentePATH
na cadeia de parâmetros, ANTES de enviar a cadeia para oexport
comandoo
:
em um caractere espacial na variável PATH e compreendido por todos os aplicativos que desejam usar essa variável. isso significa separador. então eles terão muitos diretórios na variável PATH.fonte