Sou um pouco novo no Linux e, por acaso, executo alguns comandos às cegas, para fazer as coisas. Achei que não seria um desperdício fazer esse tipo de pergunta, já que mais gente nova teria um conhecimento regular sobre elas.
Comecei a trabalhar com o Jenkins recentemente e tive que usar esse export
comando para executar o arquivo de guerra do Jenkins . Portanto, eu precisava saber o que o export
comando faz em geral e por que precisamos executá-lo ao executar o Jenkins (depois que a página inicial do Jenkins for definida).
Obrigado!
shell
unix
command
environment-variables
Chathura Kulasinghe
fonte
fonte
Respostas:
export
emsh
e shells relacionados (comobash
), marca uma variável de ambiente a ser exportada para processos-filho, para que o filho os herde.export
é definido em POSIX :fonte
Eu acho que você está vindo de um fundo de janela. Então, vou contrastá-los (também sou meio novo no Linux). Achei a resposta do usuário ao meu comentário útil para descobrir as coisas.
No Windows, uma variável pode ser permanente ou não. O termo variável de ambiente inclui uma variável definida no shell cmd com o comando SET, bem como quando a variável é definida na GUI do Windows, portanto definida no registro e tornando-se visível em novas janelas cmd. por exemplo, documentação para o comando set no Windows https://technet.microsoft.com/en-us/library/bb490998.aspx "Exibe, define ou remove variáveis de ambiente. Usado sem parâmetros, definir exibe as configurações de ambiente atuais." No Linux, set não exibe variáveis de ambiente, ele exibe variáveis de shell que ele não chama / se refere como variáveis de ambiente. Além disso, o Linux não usa set para definir variáveis (além de parâmetros posicionais e opções de shell, que explico como uma nota no final), apenas para exibi-los e mesmo assim apenas para exibir variáveis de shell. O Windows usa set para definir e exibir, por exemplo, set a = 5, o Linux não.
No Linux, acho que você poderia fazer um script que define variáveis na inicialização, por exemplo,
/etc/profile
ou/etc/.bashrc
mas caso contrário, elas não são permanentes. Eles são armazenados na RAM.Há uma distinção no Linux entre variáveis de shell e variáveis de ambiente. No Linux, as variáveis do shell estão apenas no shell atual, e as variáveis de ambiente estão naquele shell e em todos os shells filhos.
Você pode ver as variáveis do shell com o
set
comando (embora observe que, ao contrário do Windows, as variáveis não são definidas no Linux com o comando set).set -o posix; set
(fazer aquele set -o posix uma vez primeiro, ajuda a não exibir muitas coisas desnecessárias). Entãoset
exibe variáveis de shell.Você pode ver as variáveis de ambiente com o
env
comandovariáveis de shell são definidas com, por exemplo, apenas
a = 5
as variáveis de ambiente são definidas com export, export também define a variável shell
Aqui, você vê a variável shell zzz definida com zzz = 5 e mostra quando está em execução,
set
mas não como uma variável de ambiente.Aqui vemos yyy definido com exportação, portanto, é uma variável de ambiente. E veja como é mostrado nas variáveis de shell e nas variáveis de ambiente
$ zzz=5 $ set | grep zzz zzz=5 $ env | grep zzz $ export yyy=5 $ set | grep yyy yyy=5 $ env | grep yyy yyy=5 $
outros tópicos úteis
/unix/176001/how-can-i-list-all-shell-variables
/ubuntu/26318/environment-variable-vs-shell-variable-whats-the-difference
Nota - um ponto que elabora um pouco e é um tanto corretivo ao que escrevi, é que, no bash do Linux, 'set' pode ser usado para definir "parâmetros posicionais" e "opções / atributos do shell" e, tecnicamente, ambos essas são variáveis, embora as páginas do manual não as descrevam como tal. Mas ainda, como mencionado, set não definirá variáveis de shell ou variáveis de ambiente). Se você fizer
set asdf
isso, ele definirá $ 1 como asdf, e se você vir,echo $1
você verá asdf. Se você fizerset a=5
ele não definirá a variável a, igual a 5. Ele definirá o parâmetro posicional $ 1 igual à string de "a = 5". Então, se você já viu definir a = 5 no Linux, provavelmente é um erro, a menos que alguém realmente quisesse a string a = 5, em $ 1. A outra coisa que o conjunto do Linux pode definir são as opções / atributos do shell. Se você definir -o, verá uma lista deles. E você pode fazer, por exemploset -o verbose
, desligar, para ativar o verbose (a propósito, o padrão é desativado, mas isso não faz diferença). Ou você pode fazerset +o verbose
para desligar o verbose. O Windows não tem esse uso para seu comando set.fonte
Em termos simples, as variáveis de ambiente são definidas quando você abre uma nova sessão de shell. A qualquer momento, se você alterar qualquer um dos valores das variáveis, o shell não terá como escolher essa alteração. isso significa que as alterações feitas tornam-se efetivas em novas sessões de shell. O
export
comando, por outro lado, oferece a capacidade de atualizar a sessão de shell atual sobre a alteração feita na variável exportada. Você não precisa esperar até uma nova sessão de shell para usar o valor da variável que você alterou.fonte
a=5
entãoecho $a
, ele dirá 5. No entanto, você escreveu "a qualquer momento, se alterar qualquer um dos valores das variáveis, o shell não tem como escolher essa mudança. Isso significa que as alterações feitas tornam-se efetivas em novas sessões de shell." . <- Então, como ele atualizou a sessão do shell sem uma exportação. Você pode dar um exemplo onde a exportação é necessária?