Articles

Linux Set Environment Variable Command Tutorial

El shell Bash se utiliza para varios propósitos en Linux. ¿Cómo puedo personalizar la variable de entorno del shell en los sistemas operativos Linux? ¿Cómo puedo establecer y ver la variable de entorno en Linux?
Puede utilizar las variables del shell para almacenar datos, establecer opciones de configuración y personalizar el entorno del shell en Linux. El shell por defecto es Bash en Linux y se puede utilizar para los siguientes propósitos:

  1. Configurar el aspecto del shell.
  2. Configurar la configuración del terminal dependiendo del terminal que estés utilizando.
  3. Configurar la ruta de búsqueda como JAVA_HOME, y ORACLE_HOME.
  4. Crear variables de entorno según necesiten los programas.
  5. Ejecutar los comandos que desee ejecutar cada vez que inicie o cierre la sesión.
  6. Configurar alias y/o función del shell para automatizar tareas y ahorrar tiempo.
  7. Cambiar el prompt de bash.
  8. Configurar las opciones del shell.
  9. Dos tipos de variables del shell

  • Variables de entorno (GLOBAL): Normalmente, los usuarios finales no deberían meterse con las variables de entorno, ya que están disponibles en todo el sistema, y las subshells y los procesos hijos pueden acceder a ellas. En ciertos escenarios, podemos modificarlas según nuestras necesidades. Por ejemplo, podemos establecer una ruta en todo el sistema para la aplicación JAVA o PATH para buscar binarios. En casi todos los casos, utilizamos el comando export para definir o modificar las variables de entorno.
  • Variables de shell y definidas por el usuario (LOCAL) : Como su nombre indica, son definidas por los usuarios y se aplican actualmente a la sesión de shell actual.
    • Puede utilizar los siguientes comandos para ver y configurar el entorno.

      Mostrar las variables de entorno actuales en Linux

      El comando printenv muestra todas o las variables de entorno dadas. Abre el prompt de la terminal y luego escribe:
      printenv
      printenv VAR_NAME
      printenv PS1
      printenv ORACLE_HOME
      printenv JAVA_HOME
      # use the grep command/egrep command to filter out variables #
      printenv | grep APP_HOME
      printenv | egrep 'APP_HOME|DOCKER_HOME|NIX_BACKUP_HOST'

      Comando env

      El comando env ejecuta un comando de Linux con un entorno modificado. La sintaxis es:

      env VAR_NAME=VALUEenv VAR_NAME=VALUE CMD1 ARG1env VAR_NAME=VALUE CMD1 ARG1

      Tenga en cuenta que si no se especifica ningún nombre de comando tras las especificaciones del entorno, el entorno resultante se muestra en pantalla. Esto es como especificar el comando printenv como se ha comentado anteriormente. Por ejemplo:

      envenv | moreenv | grep 'PS1'

      Cómo establecer y listar variables de entorno en Linux usando el comando set

      El comando env/printenv muestra sólo las variables de entorno del shell de Linux. Qué pasa si necesitas ver una lista de todas las variables, incluyendo el shell, el entorno, las funciones del shell definidas por el usuario? Pruebe el siguiente comando set para imprimir las variables de entorno:
      set
      set | grep BASH

      Esto es lo que vemos:

      BASH=/bin/bashBASH_ARGC=()BASH_ARGV=()BASH_LINENO=()BASH_SOURCE=()BASH_VERSINFO=(="3" ="2" ="25" ="1" ="release" ="x86_64-redhat-linux-gnu")BASH_VERSION='3.2.25(1)-release'COLORS=/etc/DIR_COLORS.xtermCOLUMNS=237CVS_RSH=sshDIRSTACK=()EUID=0GROUPS=()G_BROKEN_FILENAMES=1HISTFILE=/root/.bash_historyHISTFILESIZE=1000HISTSIZE=1000HOME=/rootHOSTNAME=server3.www.p.cyberciti.bizHOSTTYPE=x86_64IFS=$' \t\n'INPUTRC=/etc/inputrcLANG=en_US.UTF-8LESSOPEN='|/usr/bin/lesspipe.sh %s'LINES=64LOGNAME=rootLS_COLORS='no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:'MACHTYPE=x86_64-redhat-linux-gnuMAIL=/var/spool/mail/rootMAILCHECK=60OPTERR=1OPTIND=1OSTYPE=linux-gnuPATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/binPIPESTATUS=(="0")PPID=35469PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\007"'PS1='\$ 'PS2='> 'PS4='+ 'PWD=/rootSHELL=/bin/bashSHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitorSHLVL=1SSH_CLIENT='10.1.3.116 44212 22'SSH_CONNECTION='10.1.3.116 44212 10.10.29.68 22'SSH_TTY=/dev/pts/0TERM=xtermUID=0USER=root_=setconsoletype=ptytmpid=0genpasswd () { local l=$1; && l=16; tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs}xrpm () { && ( rpm2cpio "$1" | cpio -idmv )}

      El $PATH define la ruta de búsqueda de los comandos. Es una lista separada por dos puntos de directorios en los que el shell busca comandos. El $PS1 define la configuración de su prompt.Consulte la lista de todas las variables del shell de uso común para obtener más información. Puede mostrar el valor de una variable utilizando el comando printf o el comando echo:

      echo "$HOME"echo "$PS1"printf "%s\n" "$HOME"

      Las salidas del último comando muestran la ubicación de mi directorio de inicio establecido por la variable de entorno $HOME en Linux:
      /home/vivek

      Configuración de variables de entorno en el comando Linux

      La sintaxis es bastante sencilla:

      # A variable may be assigned to by a statement of the form #VAR_NAME=valueVAR_STR="this is a string"VAR_NUM_TRY=5MY_OS="Ubuntu"DOMAIN_NAME="cyberciti.biz|nixcraft.com" # If value is not given, the variable is assigned the null string.is_backup_failed= # Empty variable sql_tables="" # Boolean (true or false)is_job_failed=false

      Algunos puntos clave que hay que recordar al crear o configurar variables de entorno en Linux cuando se usa bash:

      1. No poner espacio alrededor del símbolo =.
      2. Al igual que los comandos de Linux, los nombres de las variables de bash distinguen entre mayúsculas y minúsculas. Normalmente definimos las variables de entorno sólo con nombres en MAYÚSCULAS y se considera la mejor práctica, pero no es necesario.
      3. Por defecto, el ámbito de las variables de Linux es LOCAL. Podemos hacerlas GLOBALES (o variables de entorno) utilizando el comando export.

      Imprimamos los valores de nuestras variables VAR_NUM, VAR_NUM, MY_OS, y otras variables definidas anteriormente usando varios comandos:

      echo "$VAR_NUM"echo "$MY_OS"printf "%s\n" "$DOMAIN_NAME"echo $is_backup_failed

      Desconfiguración/eliminación de valores y variables del shell

      Podemos desconfigurar valores y atributos de las variables y funciones del shell utilizando el comando unset:

      unset var_nameunset MY_OSunset is_backup_failed

      Cómo establecer variables de entorno de sólo lectura en Linux al usar bash

      Utilizamos el comando readonly de la siguiente manera:

      readonly var=valuereadonly PI=3.14export PI # Make it enviorment/global var echo "$PI"PI=4.2bash -c "echo $PI"unset PI
      Bash configuró un comando Linux de sólo lectura varible

      Configurando una variable de lectura inmodificableonly bash variable on my Ubuntu Linux desktop

      Acceder a variables definidas por el usuario en sub-shells y otras instancias

      Iniciemos una nueva instancia de bash, entrar y tratar de imprimir los valores de la siguiente manera:

      # 1. Define mysql_bak_dest and _mysql_dump variables mysql_bak_dest="/aws/efs"_mysql_dump="/usr/bin/mysqldump" # 2. Print 'mysql_bak_dest' and '_mysql_dump' variablesecho "$mysql_bak_dest" echo "$_mysql_dump" # 3. start a new shell bash # 4. Can you print 'mysql_bak_dest' and '_mysql_dump' variables ?echo "$mysql_bak_dest" echo "$_mysql_dump" # 5. Exit and go back parent shell session and print 'mysql_bak_dest' and '_mysql_dump' variablesexit echo "$mysql_bak_dest" echo "$_mysql_dump" # 6. Can you use the printenv to print 'mysql_bak_dest', '_mysql_dump', 'HOME' variable ?printenv mysql_bak_destprintenv $_mysql_dumpprintenv HOME
      Cómo establecer y listar variables de entorno en Linux

      Establecimiento y listado de variables LOCALES de entorno en Linux

      En el paso # 4, la salida está vacía. Pero, ¿por qué? Significa que las variables que definimos no son de entorno, y son LOCALES. En un sub-shell y otras nuevas instancias del shell, los valores de las variables no se exportan. Por lo tanto, usamos el comando export para hacerlas GLOBALES o variables de entorno. Por ejemplo:

      export var=value# make them GLOBAL or environment variable export mysql_bak_dest="/aws/efs"export _mysql_dump="/usr/bin/mysqldump"echo "$mysql_bak_dest" echo "$_mysql_dump"# Start a new sub-shell or instance by tping the 'bash' and try to access GLOBAL or environment vars bash -c "echo $mysql_bak_dest; echo $_mysql_dump"
      Cómo configurar las variables de entorno en Linux

      Cómo configurar variables de entorno (GLOBAL) en Linux usando export para la sesión bash del usuario actual y exportada

      comando export

      Puedes modificar cada variable de entorno o del sistema usando el comando export. Establezca la variable de entorno PATH para incluir el directorio donde instaló el directorio bin con los scripts de perl y shell:

      export PATH=${PATH}:/home/vivek/bin

      O

      export PATH=${PATH}:${HOME}/bin

      Para establecer la variable de entorno JAVA_HOME en el directorio donde instaló la aplicación J2SE SDK, introduzca:

      export PATH=${PATH}:/usr/java/jdk1.5.0_07/bin

      Puede establecer varias rutas de la siguiente manera:

      export ANT_HOME=/path/to/ant/direxport PATH=${PATH}:${ANT_HOME}/bin:${JAVA_HOME}/bin

      Una nota sobre env y configuración de variables

      Primero establece la variable NFS_ROOT a /efs/ec2/wwwdata y ejecuta el script perl llamado check_for_files.pl
      env NFS_ROOT=/efs/ec2/wwwdata check_for_files.pl
      En este ejemplo, ejecuta ‘vim’ con el entorno que contenga ‘LOGNAME=nixcraft’,y ‘DISPLAY=desktop2:0’:
      env - DISPLAY=desktop2:0 LOGNAME=nixcraft vim /path/to/file
      Configura FOO a bar y lo imprime con perl:
      env - FOO=bar /usr/bin/perl -e 'print "$FOO \n"'
      No podemos ver $FOO desde el shell ya que sólo se definió para el código perl:
      echo "$FOO"

      ¿Cómo hago que todas las configuraciones de las variables de entorno sean permanentes/persistentes en Linux?

      El archivo ~/.bash_profile ($HOME/.bash_profile) o ~/.profile se ejecuta cuando inicias sesión usando la consola o remotamente usando ssh. Escriba el siguiente comando para editar el archivo ~/.bash_profile, introduzca:
      $ vi ~/.bash_profile
      Agregue la configuración de $PATH, introduzca:
      export PATH=${PATH}:${HOME}/bin
      Guarde y cierre el archivo.

      Establezca el nombre de la instancia de IBM DB2

      Escriba el siguiente comando:

      export DB2INSTANCE=prod_sales

      Una nota sobre el archivo /etc/profile

      /etc/profile o /etc/profile.d/ contiene el entorno del sistema Linux y los programas de inicio. Es utilizado por todos los usuarios con bash, ksh, sh shell. Normalmente se utiliza para establecer la variable PATH, los límites de usuario y otros ajustes para el usuario. Sólo se ejecuta para el shell de inicio de sesión. Si usted quería hacer grandes cambios o cambios específicos de la aplicación utilizar /etc/profile.d/ directorio como se explica aquí y aquí.
      Ver los siguientes recursos:

      • Personalizar los entornos de shell bash desde el wiki de scripts de shell de Linux.
      • Variable de entorno UNIX Set
      Archivo Propósito Ejemplos (usar el cat para ver un archivo)
      /etc/environment Configurar lasamplio de variables de entorno.
      PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
      /etc/profile Fichero .archivo de perfil para el shell Bourne (sh) y los shells compatibles con Bourne como bash, ksh, ash y otros.
      if ; then if && ; then # The file bash.bashrc already sets the default PS1. # PS1='\h:\w\$ ' if ; then . /etc/bash.bashrc fi else if ; then PS1='# ' else PS1='$ ' fi fifi if ; then for i in /etc/profile.d/*.sh; do if ; then . $i fi done unset ifi
      /etc/profile.d/ Toda la personalización del entorno específico del usuario y del sitio debe colocarse en este directorio. Esto también es para todo el sistema. $ ls -l /etc/profile.d/
      $ cat /etc/profile.d/gawk.csh

      gawkpath_default () {unset AWKPATHexport AWKPATH=`gawk 'BEGIN {print ENVIRON}'`} gawkpath_prepend () { && AWKPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKPATH="$*:$AWKPATH"} gawkpath_append () { && AWKPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKPATH="$AWKPATH:$*"} gawklibpath_default () {unset AWKLIBPATHexport AWKLIBPATH=`gawk 'BEGIN {print ENVIRON}'`} gawklibpath_prepend () { && \AWKLIBPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKLIBPATH="$*:$AWKLIBPATH"} gawklibpath_append () { && \AWKLIBPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKLIBPATH="$AWKLIBPATH:$*"}
      $HOME/.bash_profile El archivo de inicialización personal, ejecutado para los shells de login.
      /usr/bin/keychain /root/.ssh/id_ed25519source /root/.keychain/$HOSTNAME-sh
      $HOME~/.bashrc El archivo de inicio individual por cada shell interactivo.
      PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ 'umask 022export LS_OPTIONS='--color=auto'export PATH="$HOME:/home/vivek/bin"eval "`dircolors`"alias ls='ls $LS_OPTIONS'alias ll='ls $LS_OPTIONS -l'alias l='ls $LS_OPTIONS -lA'alias rm='rm -i'alias cp='cp -i'alias mv='mv -i'
      $HOME/.bash_logout El archivo de limpieza del shell de inicio de sesión individual, que se ejecuta cuando un shell de inicio de sesión sale
      if ; then && /usr/bin/clear_console -qfi

      Resumiendo

      Has aprendido a establecer y listar variables de entorno en Linux cuando se utiliza bash:

      Comando de exportación

      Comando

      Comando Descripción Ejemplo(s)
      declarar comando Declarar variables bash y darles atributos como integer, arrays indexados, arrays asociativos, readonly, etc. Si no se dan variables u opciones para declarar, mostrará los atributos y valores de todas (las variables igual que el conjunto en ejecución) Ver ‘help declare’

      declaredeclare | grep BASHdeclare | grep function_name# Make sure str_size have the 'integer' attribute declare -i db_size=20echo $db_size # will print 20db_size="foo"echo $db_size # will print 0 # Set max size for linux container and make it read-only too declare -ir MAX_MEM_FOR_CONTAINER=4096
      Comando env Ejecuta un programa en un entorno modificado. Imprime todas las variables de entorno.
      envenv | moreenv | grep SERVER_ROOT
      Comando que establece variables de entorno (GLOBAL) y exporta el entorno a una subshell u otras instancias. exportar NFS_ROOT=/aws/ec2/efs
      Comando printenv Imprime toda o parte (dada) de las variables de entorno en Linux.
      printenv SHELLprintenvprintenv | egrep 'SHELL|PS1|PS2'
      readonly Marcar las variables del shell como inmodificables, es decir de sólo lectura o variable constante del shell
      readonly K_VERSION="1.9.52"
      Comando set Establezca o desestablezca los valores de las opciones del shell y los parámetros posicionales. Además, muestra todas las variables de entorno. Ver ‘help set’

      set | moreMY_DOMAINS="cyberciti.biz:nixcraft.com:cyberciti.com"IFS=':'set -- $MY_DOMAINSecho "$1"echo "$2"echo "$3"for d in $@do echo "Working on $d ..."done
      Comando unset Elimina las variables del shell y del entorno. No todas las variables pueden ser unset. Por ejemplo, las variables de sólo lectura no se pueden desestablecer. desestablecer FOO

      🐧 Recibe los últimos tutoriales sobre Linux, Open Source & DevOps a través del feed RSS o del boletín semanal por correo electrónico.
      🐧 23 comentarios hasta ahora… añadir uno ↓

      Categoría Lista de comandos de Unix y Linux
      Gestión de archivos cat
      Firewall Alpine Awall – CentOS 8 – OpenSUSE – RHEL 8 – Ubuntu 16.04 – Ubuntu 18.04 – Ubuntu 20.04
      Utilidades de red dig – host – ip – nmap
      OpenVPN CentOS 7 – CentOS 8 – Debian 10 – Debian 8/9 – Ubuntu 18.04 – Ubuntu 20.04
      Administrador de paquetes apk – apt
      Gestión de procesos bg – chroot – cron – disown – fg – jobs – killall – kill – pidof – pstree – pwdx – time
      Búsqueda grep – whereis – which
      Información del usuario grupos – id – lastcomm – last – lid/libuser-lid – logname – members – users – whoami – who – w
      WireGuard VPN Alpine – CentOS 8 – Debian 10 – Firewall – Ubuntu 20.04

Dejar una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *