export VARIABLE_NAME='some value'
é a forma de definir uma variável de ambiente em qualquer shell compatível com POSIX ( sh
, dash
, bash
, ksh
, etc .; também zsh). Se a variável já tiver um valor, você poderá usá export VARIABLE_NAME
-la para torná-la uma variável de ambiente sem alterar seu valor.
Os shells Bourne pré-POSIX não suportam isso, e é por isso que você verá scripts que evitam export VARIABLE_NAME='some value'
e usam VARIABLE_NAME='some value'; export VARIABLE_NAME
. Mas as conchas Bourne pré-POSIX são extremamente raras hoje em dia.
setenv VARIABLE_NAME='some value'
é a sintaxe csh para definir uma variável de ambiente. setenv
não existe no sh, e o csh é extremamente raramente usado em scripts e foi superado pelo bash para uso interativo nos últimos 20 anos (e no zsh por mais tempo), para que você possa esquecê-lo, a menos que o encontre.
O env
comando raramente é útil, exceto nas linhas shebang . Quando invocado sem argumentos, ele exibe o ambiente, mas export
melhora (classificado e frequentemente citado para desambiguar novas linhas em valores e novas linhas que separam valores). Quando invocado com argumentos, ele executa um comando com variáveis de ambiente extras, mas o mesmo comando sem env
também funciona ( VAR=value mycommand
é executado mycommand
com VAR
set para value
, assim como env VAR=value mycommand
). O motivo env
é útil na linha shebang é que ele executa a PATH
pesquisa e, por acaso, não faz mais nada quando chamado com um nome de comando. O env
comando pode ser útil para executar um comando com apenas algumas variáveis de ambiente com-i
, ou sem parâmetros para exibir o ambiente, incluindo variáveis com nomes inválidos que o shell não importa.
Gilles 'SO- parar de ser mau'
fonte
VAR=asdf
atualiza o ambiente seVAR
já estava no ambiente. (Isso não era verdade na concha original de Bourne.)Existem várias perguntas com respostas que respondem a isso:
Tentando entender .bashrc, env e export
Diferença entre variáveis de shell que são exportadas e aquelas que não estão no bash
Qual é a diferença no uso entre variáveis de shell e variáveis de ambiente?
O comando bash setenv não foi encontrado
Qual é a diferença entre "export" e "setenv"?
(etc.)
fonte