O que exporta PATH = alguma coisa: $ PATH significa?

21

Sou muito novo no Linux e coloquei o seguinte comando no final do arquivo .profile em minha pasta pessoal:

export PATH="~/.composer/vendor/bin:$PATH"

Conheço os problemas das variáveis de ambiente e seus valores um pouco do Windows, mas neste caso quero entender o que esse comando faz e quais são as partes que ele contém:

  1. O que é essa frase de "exportação" no início? Ele está exportando os dados para serem disponibilizados para o Bash?

  2. Qual é o primeiro PATH e qual é o segundo $PATH e por que precisamos de dois?

por JohnDoea 13.01.2016 / 16:29

6 respostas

1

Eu li aqui e em outros lugares na web, conversei com um amigo sobre isso e decidi que, como um calouro (talvez mais um novato do Ubuntu, então alguns aqui poderiam pensar), eu deveria mapear este comando - eu deveria fazer um mapa e, assim, aprender o que é e onde:

Dados preliminares

Se por enquanto você não entendeu algo neste capítulo - não se preocupe, ele ficará mais claro conforme você continuará lendo, mas para entender esse assunto você precisa ler sobre variáveis de ambiente (EVs), seus valores e propósito. Agora vou tentar explicar o comando em palavras simples e em um método de mapeamento, para recém-chegados como eu e somente para recém-chegados. Tentei fazer o meu melhor aqui ...

Mapeamento

export PATH="~/.composer/vendor/bin:$PATH"

O valor original do EV "PATH", como vem com o Ubuntu 15.10, é:

/usr/bin:/usr/sbin

No próprio comando, note que temos duas frases PATH. O último é $ PATH - O $ diz "imprima o valor original ou valores do EV próximo a você"; O EV ao lado dele é o PATH EV.

Nós exportamos a própria variável de caminho (também disponível para subprocessos, processos do IE que são executados na CLI que não são realmente o shell Bash, mas são executados dentro dela (como Drush , que é o Drupal CLI).

Além da exportação, também 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 eu mencionei no parágrafo acima, usa para distinto o novo valor do original.

  • O "" é a área em que o valor / s reside.

  • O ~ é a pasta pessoal.

Espero que, após esse mapeamento, o comando seja mais claro para calouros como eu.

    
por JohnDoea 14.01.2016 / 17:58
32
  

O que é essa frase de "exportação" no começo?

export é um comando (mais precisamente, é um Bash incorporado , isto é, não é um presente executável em PATH , é um comando que o Bash incorporou em si mesmo).

  

A exportação dos dados está disponível para o Bash?

export define a variável de ambiente no lado esquerdo da atribuição para o valor no lado direito da atribuição; essa variável de ambiente é visível para o processo que a configura e para todos os subprocessos gerados no mesmo ambiente, isto é, para a instância Bash que origina ~/.profile e para todos os subprocessos gerados no mesmo ambiente (que pode incluir, por exemplo, também outros shells, que por sua vez poderão acessá-lo).

  

Qual é o primeiro PATH e qual é o segundo $PATH , e por que precisamos de dois?

O primeiro PATH , conforme explicado acima, é a variável de ambiente a ser definida usando export .

Desde PATH normalmente contém alguma coisa quando ~/.profile é originado (por padrão, ele contém /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games ), simplesmente definindo PATH para ~/.composer/vendor/bin faria PATH contêm apenas ~/.composer/vendor/bin .

Portanto, as referências a uma variável em um comando são substituídas por (ou " expandido "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 a PATH , de modo que PATH termine contendo ~/.composer/vendor/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games (ou seja, o que PATH já contém mais ~/.composer/vendor/bin: no início).

    
por kos 13.01.2016 / 16:52
15

link provavelmente irá ajudá-lo. Também man bash pode ser muito útil para entender como isso funciona (pelo menos no Bash)

De qualquer forma - como para PATH= você está basicamente configurando a variável PATH , adicionando novos caminhos para pesquisar, adicionando no final caminhos já definidos anteriormente, com $PATH (que é basicamente uma referência a a variável PATH ).

Então, digamos que o seu PATH estava tão definido como:

PATH="x:y:z"

e depois você define

PATH="a:b:c:$PATH"

seu PATH depois disso será como:

a:b:c:x:y:z

Espero que isso faça sentido.

E, além disso, você exporta a nova variável para que ela seja conhecida em seu ambiente, incluindo também processos / subpastas filho.

Esteja ciente também de que a ordem dos diretórios definidos em PATH pode ser importante. E algo como PATH="$PATH:a:b:c" fornecerá o resultado:

x:y:z:a:b:c

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 dar alguns resultados inesperados às vezes).

    
por Jacek 13.01.2016 / 16:39
2

Aqui está o comando para que todos possam acompanhar enquanto passam pelos pontos. export PATH="~/.composer/vendor/bin:$PATH"

  • O comando export shell embutido (o que significa que não há /bin/export , é um shell) basicamente torna as variáveis de ambiente disponíveis para outros programas chamados de bash (consulte a pergunta vinculada em Leitura Extra) e as subshells.
  • A atribuição no shell levará a expansão primeiro e, em seguida, a atribuição ocorrerá em segundo. Então, o que está dentro de aspas duplas é expandido primeiro, salvo na variável PATH mais tarde.
  • $PATH é a atribuição padrão de PATH (ou pelo menos a aparência da variável até este comando aparecer em .bashrc ou .profile ) e expandi-la.
  • ~/.composer/vendor/bin será expandido para /home/username/.composer/vendor/bin , onde .composer é a pasta oculta devido ao ponto principal.
  • Esse curto ~/.composer/vendor/bin:$PATH foi transformado em uma longa lista de pastas, separadas por : . Tudo é colocado entre aspas duplas, de modo que incluímos pastas com espaços em seu caminho.
  • Finalmente, tudo é armazenado em PATH variable e os comandos externos podem ser usados

Exemplo simples

Meu shell interativo é, na verdade, mksh , que também possui export incorporado. Usando export para definir VAR , minha variável pode ser passada para e usada pela cadeia subseqüente de comandos / subprocessos, onde exportei essa mesma variável

$ echo $SHELL            
/bin/mksh
$ VAR="HelloAskUbuntu"
$ bash -c 'echo $VAR' 
$ export VAR="HelloAskUbuntu"                                                  
$ bash -c 'echo $VAR'                                                          
HelloAskUbuntu
$ 

Leitura extra

por Sergiy Kolodyazhnyy 13.01.2016 / 17:16
1

O comando export torna as variáveis disponíveis em subshells. Ou seja, sem ela, a variável PATH não seria visível em subshells.

PATH é mencionado duas vezes:

  • Como variável, o valor está sendo atribuído à esquerda do sinal = .
  • À medida que o nome da variável é substituído por seu valor direito do sinal = . Isso faz com que o valor antigo seja parte do novo valor.
por rexkogitans 14.01.2016 / 09:22
0
export PATH="~/.composer/vendor/bin:$PATH"
  1. o export é um comando buildin do bash, significa variáveis de exportação para serem variáveis de envirement. (você pode digitar help export para se inclinar mais

    (os caracteres que seguem o comando são parametros, divididos por espaço, portanto, neste caso, existe apenas um parâmetro)

  2. o PATH é o nome da variável, geralmente, varibale predefinido por bash, seja nomeado em maiúsculas.

  3. o = significa atribuir valor a essa variável.

  4. toda a string é o valor do varibale

  5. o $PATH é um tipo de função do bash, chamado variable expantion , o bash irá substituir o valor do existir PATH na cadeia de parâmetros, ANTES de enviar a string para export command

  6. o : em um caractere especial na variável PATH e entendido por todos os aplicativos que desejam usar essa variável. isso significa separadora. então eles terão muitos diretórios na variável PATH.

por lovespring 15.01.2016 / 11:30