Siéntete libre de compartir nuestra web y códigos con otro, ayúdanos a ampliar esta comunidad.
Solución:
Solo necesitas export
para las variables que deberían ser “vistas” por otros programas que se ejecutan en el shell, mientras que los que solo se utilizan dentro del shell no necesitan ser export
ed.
Esto es lo que dice la página de 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:
- Yo primero configuro
$MYVAR
para ser una variable de Shell conMYVAR="value"
. Utilizandoecho
Puedo repetir su valor porque el eco es parte del caparazón. - Entonces creo
echo.sh
. Ese es un pequeño guión 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. - Al llamar
echo.sh
no produce nada, porque el nuevo proceso no hereda$MYVAR
- Entonces exporto
$MYVAR
en mi entorno con elexport
palabra clave - Cuando ahora corro lo mismo
echo.sh
de nuevo, se hace eco del contenido de$MYVAR
porque lo obtiene del medio ambiente
Entonces, para responder a su pregunta:
Depende de dónde se vaya a utilizar una variable, si tiene que exportarla o no.
Usar export
para las variables de entorno. Las variables de entorno son una característica del sistema operativo. Las variables de entorno son heredadas por 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 distintas de shells son variables de entorno. A continuación, se muestran 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 necesite conocer la ubicación del directorio de inicio del usuario.PATH
– indica dónde encontrar archivos ejecutables para iniciar otros programas. Usado por todos los programas que necesitan iniciar otro programa.LD_LIBRARY_PATH
: Indica dónde encontrar archivos de biblioteca dinámica. Utilizado por todos los ejecutables vinculados dinámicamente.EDITOR
,VISUAL
– indica qué programa ejecutar cuando se necesita un editor. Utilizado por cualquier programa que necesite iniciar un editor de texto.DISPLAY
,XAUTHORITY
– indica cómo conectarse al servidor X11. Utilizado por clientes X11 (es decir, programas GUI).LESS
– las opciones se activan automáticamente cuandoless
se ejecuta. Usado porless
.http_proxy
: Indica el proxy web que se utilizará. Utilizado por la mayoría de los navegadores web.
No utilice export
para variables de shell. Las variables de shell son una característica del shell como lenguaje de programación. Las variables de shell se utilizan solo dentro del shell donde se establecen; no tienen ningún significado para los programas lanzados por el shell. Las variables del shell se duplican cuando se crea un subshell, como el resto del estado del shell. A continuación, se muestran algunos ejemplos de variables de shell que tienen un significado para los shells populares:
PS1
– el mensaje que se 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 utiliza el shell, la mayoría de los scripts de shell utilizan variables para sus propósitos internos.
La mayoría de las variables de entorno (p. Ej. PATH
) tiene sentido para una sesión completa y debe establecerse en ~/.profile
o un archivo similar. Variables que tienen sentido solo para un shell específico (p. Ej. PS1
) debe establecerse en un archivo específico de shell como ~/.bashrc
o ~/.zshrc
. Consulte ¿Existe un archivo equivalente “.bashrc” leído por todos los shells?
Para las variables internas de bash no es necesario export
. De tu ejemplo
HISTTIMEFORMAT
es utilizado por bash mismo y no necesita una exportación
MYSQL_HISTFILE
es para mysql
y eso necesita exportar de otra manera mysql
no lo ve.
Comentarios y puntuaciones
Recuerda que tienes la capacidad de reseñar si te fue útil.