Usando la exportación en .bashrc

45

He notado en mi .bashrcque algunas líneas tienen exportdelante de ellas, como

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

mientras que otros no, como

HISTSIZE=100000

Me pregunto si, en primer lugar, esto es correcto, y en segundo lugar cuál es la regla para el uso exporten .bashrc.

Martin Vegter
fuente

Respuestas:

53

Solo necesita exportvariables que deberían ser "vistas" por otros programas que inicie en el shell, mientras que las que solo se usan dentro del shell no necesitan ser exporteditadas.

Esto es lo que dice la página del manual:

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.

Esto se puede demostrar con lo siguiente:

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

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

Explicación:

  • Primero configuré ${MYVAR}para ser una variable de Shell con MYVAR="value". Usando echopuedo hacer eco de su valor porque echo es parte del shell.
  • Entonces creo echo.sh. Es un pequeño script que básicamente hace lo mismo, solo hace eco ${MYVAR}, pero la diferencia es que se ejecutará en un proceso diferente porque es un script separado.
  • Cuando se llama echo.shno genera nada, porque el nuevo proceso no hereda${MYVAR}
  • Luego exporto ${MYVAR}a mi entorno con la exportpalabra clave
  • Cuando ahora vuelvo a ejecutar lo mismo echo.sh, hace eco del contenido ${MYVAR}porque lo obtiene del entorno

Entonces para responder a su pregunta:

Depende de dónde se vaya a utilizar una variable, ya sea que tenga que exportarla o no.

repetición
fuente
17

Uso exportpara variables de entorno . Las variables de entorno son una característica del sistema operativo. Las variables de entorno son heredadas por los procesos secundarios: si las configura en un shell, están disponibles en todos los programas iniciados por este shell. Las variables utilizadas por muchas aplicaciones o por aplicaciones específicas que no sean shells son variables de entorno. Aquí hay algunos ejemplos de variables de entorno comunes:

  • HOME- indica el directorio de inicio del usuario, que es donde se encuentran los archivos de configuración por usuario. Utilizado por cualquier programa que lea archivos de configuración por usuario o que de otro modo necesite conocer la ubicación del directorio de inicio del usuario.
  • PATH- indica dónde encontrar archivos ejecutables para iniciar otros programas. Usado por cada programa que necesita iniciar otro programa.
  • LD_LIBRARY_PATH- indica dónde encontrar archivos de biblioteca dinámica. Usado por cada ejecutable vinculado dinámicamente.
  • EDITOR, VISUAL- indica qué programa ejecutar cuando se necesita un editor. Usado por cualquier programa que necesite iniciar un editor de texto.
  • DISPLAY, XAUTHORITY- indica cómo conectarse al servidor X11. Usado por clientes X11 (es decir, programas GUI).
  • LESS- Opciones activadas automáticamente cuando lessse ejecuta. Usado por less.
  • http_proxy- indica el proxy web a usar. Usado por la mayoría de los navegadores web.

No lo use exportpara variables de shell. Las variables de shell son una característica del shell como lenguaje de programación. Las variables de shell se usan solo dentro del shell donde se establecen; no tienen ningún significado para los programas lanzados por el shell. Las variables de shell se duplican cuando se crea un subshell, como el resto del estado del shell. Aquí hay algunos ejemplos de variables de shell que tienen un significado para los shells populares:

  • PS1 - el mensaje para mostrar antes de cada comando.
  • IFS - los caracteres que separan palabras en expansiones de variables sin comillas y sustituciones de comandos.
  • HISTFILE - un archivo donde el shell escribirá el historial de comandos.

Además de las variables que usa el shell, la mayoría de los scripts de shell usan variables para sus propósitos internos.

La mayoría de las variables de entorno (p PATH. Ej. ) Tienen sentido para una sesión completa, y deben establecerse en ~/.profileun archivo similar. Las variables que tienen sentido solo para un shell específico (p PS1. Ej. ) Deben establecerse en un archivo específico del shell como ~/.bashrco ~/.zshrc. Consulte ¿Hay un archivo equivalente ".bashrc" leído por todos los shells?

Gilles 'SO- deja de ser malvado'
fuente
3

Para bash, las variables internas no son necesarias export. A partir de su ejemplo, HISTTIMEFORMATbash mismo lo utiliza y no necesita una exportación MYSQL_HISTFILEpara la mysqlque necesita exportar, de lo contrario mysqlno lo ve.

Zelda
fuente