usando export em .bashrc

37

Eu notei no meu .bashrc , que algumas linhas têm export na frente, como

export HISTTIMEFORMAT="%b-%d  %H:%M  "
...
export MYSQL_HISTFILE="/root/.mysql_history"

enquanto outros não, como

 HISTSIZE=100000

Eu estou querendo saber, primeiro se isso está correto, e segundo qual é a regra para usar export em .bashrc .

    
por Martin Vegter 04.01.2014 / 17:44

3 respostas

44

Você só precisa exportar para variáveis que devem ser "vistas" por outros programas que você inicia no shell, enquanto os que são usados apenas dentro do próprio shell não precisam ser export ed.

Isto é o que a página man diz:

The  supplied  names are marked for automatic export to the environ‐
ment of subsequently executed commands.  If the -f option is  given,
the  names  refer to functions.  If no names are given, or if the -p
option is supplied, a list of all names that are  exported  in  this
shell  is  printed.   The -n option causes the export property to be
removed from each name.  If a variable name is  followed  by  =word,
the  value  of  the variable is set to word.  export returns an exit
status of 0 unless an invalid option  is  encountered,  one  of  the
names  is  not a valid shell variable name, or -f is supplied with a
name that is not a function.

Isso pode ser demonstrado da seguinte forma:

$ MYVAR="value"
$ echo ${MYVAR}
value
$ echo 'echo ${MYVAR}' > echo.sh
$ chmod +x echo.sh
$ ./echo.sh 

$ export MYVAR="value-exported"
$ ./echo.sh 
value-exported

Explicação:

  • Primeiro, defini ${MYVAR} como uma variável do Shell com MYVAR="value" . Usando echo eu posso ecoar o valor dele porque o eco é parte do shell.
  • Então eu crio echo.sh . Esse é um pequeno script que basicamente faz o mesmo, apenas ecoa ${MYVAR} , mas a diferença é que ele será executado em um processo diferente porque é um script separado.
  • Ao chamar echo.sh , ele não produz nada, porque o novo processo não herda ${MYVAR}
  • Então eu exporto ${MYVAR} para o meu ambiente com a palavra-chave export
  • Agora, quando executo o mesmo echo.sh , ele ecoa o conteúdo de ${MYVAR} porque o obtém do ambiente

Então, responda sua pergunta:

Depende de onde uma variável será usada, se você precisa exportá-la ou não.

    
por 04.01.2014 / 17:50
11

Use export para variáveis de ambiente . Variáveis de ambiente são um recurso do sistema operacional. Variáveis de ambiente são herdadas por processos filhos: se você os configurar em um shell, eles estarão disponíveis em todos os programas iniciados por este shell. Variáveis usadas por muitos aplicativos ou por aplicativos específicos que não sejam shells são variáveis de ambiente. Aqui estão alguns exemplos de variáveis de ambiente comuns:

  • HOME - indica o diretório inicial do usuário, que é onde os arquivos de configuração por usuário estão localizados. Usado por qualquer programa que leia arquivos de configuração por usuário ou precise saber a localização do diretório pessoal do usuário.
  • PATH - indica onde encontrar arquivos executáveis para iniciar outros programas. Usado por todos os programas que precisam iniciar outro programa.
  • LD_LIBRARY_PATH - indica onde encontrar arquivos de bibliotecas dinâmicas. Usado por todos os executáveis vinculados dinamicamente.
  • EDITOR , VISUAL - indica qual programa executar quando um editor é necessário. Usado por qualquer programa que precise iniciar um editor de texto.
  • DISPLAY , XAUTHORITY - indica como se conectar ao servidor X11. Usado por clientes X11 (por exemplo, programas GUI).
  • LESS - opções ativadas automaticamente quando less é executado. Usado por less .
  • http_proxy - indica o proxy da web a ser usado. Usado pela maioria dos navegadores da web.

Não use export para variáveis do shell. Variáveis shell são uma característica do shell como uma linguagem de programação. Variáveis shell são usadas somente dentro do shell onde elas estão definidas; eles não têm significado para programas lançados pelo shell. As variáveis do shell são duplicadas quando um subshell é criado, como o restante do estado do shell. Aqui estão alguns exemplos de variáveis de shell que têm um significado para shells populares:

  • PS1 - o aviso para exibir antes de cada comando.
  • IFS - os caracteres que separam palavras em expansões de variáveis não nomeadas e substituições de comandos.
  • HISTFILE - um arquivo no qual o shell irá gravar o histórico de comandos.

Além das variáveis usadas pelo shell, a maioria dos scripts usa variáveis para seus propósitos internos.

A maioria das variáveis de ambiente (por exemplo, PATH ) faz sentido para uma sessão inteira e deve ser definida em ~/.profile ou em um arquivo semelhante. As variáveis que fazem sentido apenas para um shell específico (por exemplo, PS1 ) devem ser definidas em um arquivo específico do shell, como ~/.bashrc ou ~/.zshrc . Veja Existe um arquivo equivalente ".bashrc" lido por todos os shells?

    
por 20.04.2015 / 01:36
3

Para variáveis internas do bash você não precisa de export . Do seu exemplo HISTTIMEFORMAT é usado pelo próprio bash e não precisa de uma exportação MYSQL_HISTFILE é para mysql e precisa exportar, caso contrário, mysql não o vê.

    
por 04.01.2014 / 17:48