Al configurar una variable .bashrc
, ¿debería usar esto?
export VAR=value
¿O sería esto suficiente?
VAR=value
¿Cuál es exactamente la diferencia (si hay una)?
fuente
Al configurar una variable .bashrc
, ¿debería usar esto?
export VAR=value
¿O sería esto suficiente?
VAR=value
¿Cuál es exactamente la diferencia (si hay una)?
export VAR=value
Haciendo
VAR=value
solo establece la variable durante la duración del script ( .bashrc
en este caso). Los procesos secundarios (si los hay) del script no tendrán VAR definido, y una vez que el script salga, VAR
desaparecerá.
export VAR=value
se agrega explícitamente VAR
a la lista de variables que se pasan a los procesos secundarios. ¿Quieres probarlo? Abre una concha, haz
PS1="foo > "
bash --norc
El nuevo shell obtiene el mensaje predeterminado. Si en cambio haces algo como
export PS1="foo > "
bash --norc
el nuevo shell recibe el mensaje que acaba de configurar.
Actualización: como señala Ian Kelling a continuación, las variables establecidas .bashrc
persisten en el shell que se originó .bashrc
. En general, cada vez que el shell genera un script (usando el source scriptname
comando), las variables establecidas en el script persisten durante la vida útil del shell.
PS1
es un mal ejemplo de una variable que se exportará como variable de entorno. Solo tiene sentido para los procesos secundarios que son shells y se interpreta de manera diferente por diferentes shells (por ejemplo, bash y dash). La mejor práctica es simplemente establecerlo como una variable de shell regular en.bashrc
. Ejemplos mejores de variables de entorno incluyenHOME
,PATH
,EDITOR
, etc.Ambos parecen funcionar bien, pero el uso de la exportación asegurará que la variable esté disponible para subcapas y otros programas. Para probar esto, prueba esto.
Agregue estas dos líneas a su archivo .bashrc
Luego abra un nuevo shell.
En ejecución
echo $TESTVAR
yecho $MYTESTVAR
mostrará el contenido de cada variable. Ahora dentro de ese mismo shell, elimine esas dos líneas de su archivo .bashrc y ejecútelobash
para iniciar un subshell.Correr
echo $TESTVAR
tendrá una salida vacía, pero el funcionamientoecho $MYTESTVAR
se mostrará "con la exportación"fuente