¿Cuál es la mejor manera de establecer una variable de entorno en .bashrc?

11

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)?

Flávio Amieiro
fuente

Respuestas:

16

La mejor manera

export VAR=value

La diferencia

Haciendo

VAR=value

solo establece la variable durante la duración del script ( .bashrcen este caso). Los procesos secundarios (si los hay) del script no tendrán VAR definido, y una vez que el script salga, VARdesaparecerá.

export VAR=value

se agrega explícitamente VARa 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 .bashrcpersisten en el shell que se originó .bashrc. En general, cada vez que el shell genera un script (usando el source scriptnamecomando), las variables establecidas en el script persisten durante la vida útil del shell.

agnul
fuente
1
"solo establece la variable durante la duración del script (.bashrc en este caso)" Eso es falso / engañoso. Las variables establecidas de esta manera persisten en el shell interactivo que lee .bashrc.
Ian Kelling
PS1es 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 incluyen HOME, PATH, EDITOR, etc.
Anthony Geoghegan
10

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

TESTVAR="no export"
export MYTESTVAR="with export"

Luego abra un nuevo shell.

En ejecución echo $TESTVARy echo $MYTESTVARmostrará el contenido de cada variable. Ahora dentro de ese mismo shell, elimine esas dos líneas de su archivo .bashrc y ejecútelo bashpara iniciar un subshell.

Correr echo $TESTVARtendrá una salida vacía, pero el funcionamiento echo $MYTESTVARse mostrará "con la exportación"

Mike H
fuente