Lo he notado en mi .bashrc
que algunas líneas tienen export
delante de ellos, 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 usar export
en .bashrc
.
Respuesta aceptada:
Solo necesitas export
para las variables que deben ser "vistas" por otros programas que inicie en el shell, mientras que las que solo se usan dentro del shell no necesitan ser export
ed.
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 establecí
${MYVAR}
ser una variable de Shell conMYVAR="value"
. Usandoecho
Puedo hacer eco de su valor porque echo es parte del shell. - Luego creo
echo.sh
. Ese es un pequeño script que básicamente hace lo mismo, solo hace eco de${MYVAR}
, pero la diferencia es que se ejecutará en un proceso diferente porque es un script separado. - Al llamar a
echo.sh
no genera nada, porque el nuevo proceso no hereda${MYVAR}
- Luego exporto
${MYVAR}
en mi entorno conexport
palabra clave - Cuando ahora ejecuto el mismo
echo.sh
nuevamente, repite el contenido de${MYVAR}
porque lo obtiene del medio ambiente
Entonces, para responder a tu pregunta:
Depende de dónde se vaya a utilizar una variable, si hay que exportarla o no.
Relacionado:¿Cómo exportar los registros de chat de Google?