Las variables tienen el siguiente formato:
KEY=value
KEY="Some other value"
KEY=value1:value2
:
.=
símbolo igual .zsh
y bash
, tiene su propio conjunto de variables de shell internas.Hay varios comandos disponibles que le permiten enumerar y establecer variables de entorno en Linux:
env
- El comando le permite ejecutar otro programa en un entorno personalizado sin modificar el actual. Cuando se usa sin un argumento, imprimirá una lista de las variables de entorno actuales.printenv
- El comando imprime todas o las variables de entorno especificadas.set
- El comando establece o desarma las variables de shell. Cuando
se usa sin un argumento, imprimirá una lista de todas las variables,
incluidas las variables de entorno y de shell, y las funciones de shell.unset
- El comando elimina las variables de entorno y de shell.export
- El comando establece variables de entorno.El comando más utilizado para mostrar las variables de entorno es printenv
. Si el nombre de la variable se pasa como argumento al comando, solo se muestra el valor de esa variable. Si no se especifica ningún argumento, printenv
imprime una lista de todas las variables de entorno, una variable por línea.
Por ejemplo, para mostrar el valor de la HOME
variable de entorno, ejecutaría:
printenv HOME
La salida imprimirá la ruta del usuario actualmente conectado:
/home/linuxize
También puede pasar más de un argumento al printenv
comando:
printenv LANG PWD
en_US
/home/linuxize
Si ejecuta el comando printenv
o env
sin ningún argumento, mostrará una lista de todas las variables de entorno:
printenv
La salida se verá así:
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35;... LESSCLOSE=/usr/bin/lesspipe %s %s LANG=en_US S_COLORS=auto XDG_SESSION_ID=5 USER=linuxize PWD=/home/linuxize HOME=/home/linuxize SSH_CLIENT=192.168.121.1 34422 22 XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop SSH_TTY=/dev/pts/0 MAIL=/var/mail/linuxize TERM=xterm-256color SHELL=/bin/bash SHLVL=1 LANGUAGE=en_US: LOGNAME=linuxize XDG_RUNTIME_DIR=/run/user/1000 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin LESSOPEN=| /usr/bin/lesspipe %s _=/usr/bin/printenv
A continuación, se muestran algunas de las variables de entorno más comunes:
USER
- El usuario que ha iniciado sesión actualmente.HOME
- El directorio de inicio del usuario actual.EDITOR
- El editor de archivos predeterminado que se utilizará. Este es el editor que se utilizará cuando escriba edit
en su terminal.SHELL
- La ruta del shell del usuario actual, como bash o zsh.LOGNAME
- El nombre del usuario actual.PATH
- Una lista de directorios que se buscarán al ejecutar comandos. Cuando ejecuta un comando, el sistema buscará esos directorios en este orden y usará el primer ejecutable encontrado.LANG
- La configuración regional actual.TERM
- La emulación de terminal actual.MAIL
- Ubicación de donde se almacena el correo del usuario actual.printenv
y env
imprimen solo las variables de entorno. Si desea obtener una lista de todas las variables, incluido el entorno, el shell y las variables, y las funciones del shell , puede usar el comando set
.set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
El comando mostrará una lista grande de todas las variables, por lo que probablemente desee canalizar la salida al comando less
set | less
También puede usar el comando echo para imprimir una variable de shell. Por ejemplo, para imprimir el valor de la BASH_VERSION
variable, ejecutaría:
echo $BASH_VERSION
4.4.19(1)-release
Para ilustrar mejor la diferencia entre las variables de entorno y Shell, comenzaremos con la configuración de variables de Shell y luego pasaremos a las variables de entorno.
Para crear una nueva variable de shell con el nombre MY_VAR
y el valor, Linuxize
simplemente escriba:
MY_VAR='Linuxize'
Puede verificar que la variable esté configurada mediante el echo $MY_VAR
filtrado de la salida del comando set con grep set | grep MY_VAR
:
echo $MY_VAR
Linuxize
Use el comando printenv
para verificar si esta variable es una variable de entorno o no:printenv MY_VAR
La salida estará vacía, lo que nos dirá que la variable no es una variable de entorno.
También puede intentar imprimir la variable en un sub-shell y obtendrá una salida vacía.
bash -c 'echo $MY_VAR'
El export
comando se utiliza para establecer variables de entorno.
export MY_VAR
Puede verificar esto ejecutando:
printenv MY_VAR
Linuxize
Si intenta imprimir la variable en un sub-shell, esta vez obtendrá el nombre de la variable impreso en su terminal:
bash -c 'echo $MY_VAR'
Linuxize
También puede establecer variables de entorno en una sola línea:
export MY_NEW_VAR="My New Var"
Las variables de entorno creadas de esta manera solo están disponibles en la sesión actual. Si abre un nuevo shell o si cierra la sesión, se perderán todas las variables.
Para que las variables de entorno sean persistentes, debe definir esas variables en los archivos de configuración de bash. En la mayoría de las distribuciones de Linux, cuando inicia una nueva sesión, las variables de entorno se leen de los siguientes archivos:
/etc/environment
- Utilice este archivo para configurar variables de entorno para todo el sistema. Las variables de este archivo se establecen en el siguiente formato:
FOO=bar
VAR_TEST="Test Var"
/etc/profile
- Las variables establecidas en este archivo se cargan cada vez que se ingresa a un shell de inicio de sesión de bash. Al declarar variables de entorno en este archivo, debe usar el export
comando:
export JAVA_HOME="/path/to/java/home"
export PATH=$PATH:$JAVA_HOME/bin
Archivos de configuración específicos de shell por usuario. Por ejemplo, si está utilizando Bash, puede declarar las variables en ~/.bashrc
:
export PATH="$HOME/bin:$PATH"
Para cargar las nuevas variables de entorno en la sesión de shell actual, use el comando source
source ~/.bashrc