Son variables ambientales o de capa por convención. Ambos se definen generalmente usando todas las letras mayúsculas. Esto ayuda a los usuarios a distinguir las variables ambientales dentro de otros contextos.
1 – Terminología
Como se dijo, técnicamente hay una de dos categorías en las que puede caer una variable:
1 – Terminología 2 – Visualización de variables 3 – Definiciones de variables 4 – Configuración de variables 5 – Degradación y anulación de variables 6 – Variables persistentes
Las “variables de entorno” se han definido para su uso en el shell actual y serán heredadas por cualquier shell secundario o proceso generado como resultado del padre. Las variables ambientales también se pueden usar para pasar información a los procesos generados por el shell. Las “variables de shell” están contenidas exclusivamente dentro del shell en el que se establecieron o definieron. Se utilizan principalmente para realizar un seguimiento de los datos temporales efímeros, como el directorio de trabajo actual en una sesión.
2 – Visualización de variables
Para ver todas las variables de entorno configuradas actualmente en un tipo de terminal: Alternativamente, el comando más corto env también funciona: Para ver variables de entorno individuales o específicas e imprimir con salida estándar, use cualquiera de los siguientes: Que también puede imprimir múltiples variables. Para generar variables de shell así como variables de entorno usando set haga lo siguiente: set generalmente se usa para cambiar o anular opciones y parámetros de shell, pero aquí hemos canalizado el comando a través de less para ver qué genera en lugar de permitirle realizar cambios. El comando se puede modificar para que no muestre las funciones bash residuales incluidas en la última salida (usando el modo posix). Los corchetes también indican que el proceso se ejecutará en un subshell de modo que el conjunto no cambie nada en el entorno del shell actual. Tenga en cuenta que no hay un comando para recuperar solo lo que clasificamos como variables de shell. Una forma de obtenerlos como salida es con una comparación ordenada de los dos comandos set y env anteriores. Sin embargo, esto no es cien por ciento exacto. En el último comando comm se usa para comparar la salida de set en un subshell con la salida de env en un subshell, antes de finalmente pasar a través de less . Las dos salidas comparadas también se ordenan con sort .
3 – Definiciones de variables
Variables de entorno
Así es como el sistema sabe qué shell usar al interpretar los comandos. En la mayoría de los sistemas Linux, Bash es el shell principal predeterminado, pero muchos otros pueden instalarse en el sistema y asignarse a esta variable. Esto especifica el tipo de terminal a emular cuando se ejecuta el shell. El valor predeterminado en entornos de escritorio basados en GUI suele ser linux o xterm. Se establece en el nombre de usuario del usuario de Linux actualmente conectado. Al igual que el comando pwd, contiene el directorio de trabajo actualmente activo. El último directorio de trabajo desde el que se movió el usuario. El shell usa esto cuando se invoca el comando cd - . El comando ls tiene soporte de color integrado que se usa para diferenciar entre tipos de archivos y carpetas. Los códigos de color se almacenan en esta variable que determina los colores utilizados. La variable principal “Ruta” del shell contiene una lista de directorios que el sistema consultará cuando busque comandos/programas que el usuario escriba. Se verifican en el orden indicado. El idioma establecido actualmente y la localización en uso (locales), incluida la codificación de caracteres. El directorio de inicio del usuario actual. El comando ejecutado anteriormente y su ruta. El editor de texto preferido del shell. El programa buscapersonas preferido del shell. Contiene la ubicación del correo electrónico entrante. El camino tradicional se usa como ejemplo aquí.
Variables de concha
La lista de opciones que el shell incluyó cuando se ejecutó bash. Útil para averiguar si el entorno de shell actualmente puede hacer lo que espera. La versión de bash que se está ejecutando, en forma legible por humanos. Similar a la última variable excepto en formato legible por “máquina”. El número de columnas que se utilizan para dibujar la salida en la pantalla. La pila de directorios que están disponibles con los comandos pushd y popd . Número de líneas del historial de comandos que se almacenan en el archivo por sesión de bash. El número máximo de líneas del historial de comandos que se almacenarán en la memoria. El nombre de host de la computadora en este momento. El carácter separador de campo interno que separa la entrada en la línea de comando. De forma predeterminada, este es un espacio, por lo que no hay una salida real para mostrar como un comando de ejemplo. La definición del símbolo del sistema principal. Define esencialmente cómo se ve su aviso cuando inicia una sesión de shell. Cualquier opción de shell que se pueda configurar o se haya configurado con la opción set. El UID asignado del usuario actual.
4 – Configuración de variables
Variables de concha
Para crear una variable de shell en la sesión de shell actual, especifique un nombre y un valor de la misma manera que en Bash. Cumpliendo con la convención de nomenclatura de usar mayúsculas completas para el nombre de la variable. Tenga en cuenta las comillas simples utilizadas ya que el contenido de la cadena de nuestra variable contiene un espacio. También cuando caracteres especiales como ! se utilizan en la cadena, se deben insertar apóstrofes en lugar de comillas dobles para encerrar la cadena. ! es un carácter especial en Bash, ya que generalmente se usa para expandir el historial de shell. Podemos ver la variable recién definida usando echo : Como se dijo, esta es solo una variable de shell dentro de la sesión actual de Bash y no una variable ambiental. Esto se puede verificar usando printenv : No se devuelve ningún resultado porque la definición no se reconoce como parte del entorno. Aprovechemos esto como una oportunidad para demostrar una forma de acceder al valor de cualquier caparazón o variable ambiental. Recuerda, como en este ejemplo, que para hacer referencia al valor de una variable, antecede con un signo $ . Esto es para que el shell sepa sustituir el nombre de la variable por su contenido.
Variables de entorno
Para crear uno, exporte una variable de shell existente al entorno persistente del shell usando el comando export : Esta vez, cuando verifiquemos la variable con printenv se generará. La variable ahora desciende a un proceso secundario de subshell y se retiene del padre, pruebe esto iniciando una nueva sesión de shell con bash : Para evitar tener que configurar una variable y luego exportarla al entorno, el proceso se puede combinar así: Regrese al shell principal del que vinimos con exit e intente hacer eco de la variable exportada anteriormente: Tenga en cuenta que no se devuelve ningún resultado, ya que las variables de entorno solo se pueden pasar a los procesos secundarios, y no al revés. Esto es sensato en su mayor parte, ya que “evita que los programas afecten el entorno operativo desde el que fueron llamados”. Además, cuando vuelve a salir a su shell principal principal, el entorno del shell secundario se destruye.
5 – Degradación y desarmado de variables
Para volver a cambiar una variable de entorno ya configurada a una variable de shell menor, use el parámetro -n con export : Ahora no se devuelve nada cuando se usa printenv en la variable: Todavía está configurado como una variable de shell, por lo que para anular su definición por completo de esta sesión de shell local, puede usar:
6 – Variables persistentes
La creación de variables predefinidas en el inicio de sesión depende de cómo se inicia bash y qué archivo de configuración utiliza para hacerlo. Los factores decisivos sobre qué archivo se utiliza se basan en los tipos de “shell de inicio de sesión” que ha iniciado el usuario. Los tipos son:
Iniciar sesión o No iniciar sesión Interactivo o No interactivo
Por lo tanto, las dos distinciones que se tienen en cuenta son si el shell se genera como una sesión de “inicio de sesión” o “sin inicio de sesión”. Además de si la sesión es una “sesión interactiva” o una sesión “no interactiva”.
Acceso
Un shell de inicio de sesión es una sesión de shell que siempre comienza con la autenticación del usuario. Si está iniciando sesión en una sesión de terminal o a través de SSH y se autentica, su sesión de shell se clasificará y configurará como un shell de “inicio de sesión”. Una sesión iniciada como sesión de inicio de sesión leerá primero los detalles de configuración del archivo /etc/profile y luego buscará el primer archivo de configuración de shell de inicio de sesión que pueda encontrar en el directorio de inicio del usuario. Para obtener detalles de configuración específicos del usuario. Estos archivos son los primeros que puede encontrar en ~/.bash_profile , ~/.bash_login y ~/.profile .
No iniciar sesión
Si inicia una nueva sesión de shell desde su sesión autenticada, como antes cuando llamamos al comando bash desde la terminal, se inicia una sesión de shell sin inicio de sesión. Esto es porque no se le pidió ningún detalle de autenticación cuando inició el shell secundario. Una sesión definida como shell sin inicio de sesión siempre leerá /etc/bash.bashrc y luego el archivo ~/.bashrc específico del usuario para ayudar a construir su entorno.
Interactivo
Una sesión de shell interactiva es una sesión de shell que está conectada a un terminal y en uso. Entonces, una sesión normal que comienza con SSH generalmente se define como un shell de inicio de sesión interactivo. Consulte “No interactivo” en la siguiente sección para ver la diferencia entre los dos.
no interactivo
Una sesión de shell no interactiva es aquella que no está adjunta a una sesión de terminal y que no está en uso actualmente. Por ejemplo, un script que se ejecuta desde la línea de comandos generalmente se ejecuta en un shell no interactivo y sin inicio de sesión. Los shells no interactivos más notables leen la variable de entorno denominada BASH_ENV y leen el archivo especificado en esta variable para construir el nuevo entorno de shell.
Configuración de variables de entorno al iniciar sesión
Por lo tanto, hay una variedad de circunstancias que dictan cuál de los diferentes archivos se necesita para establecer variables predefinidas. Esto tiene sus ventajas y brinda mucha flexibilidad para situaciones específicas en las que es posible que desee solo ciertas configuraciones para un shell de inicio de sesión y otras configuraciones diferentes en un shell sin inicio de sesión. A pesar de esto para hacer las cosas más fáciles y generales, la mayoría de las personas querrán la misma configuración para ambos escenarios. Según su distribución de Linux y su configuración personal, normalmente los archivos de configuración de inicio de sesión generan los archivos de configuración que no son de inicio de sesión. Lo que significa que no tiene que definir las variables en ambos archivos y puede salirse con la suya definiendo las variables de entorno que desea en ambos solo dentro de los archivos de configuración sin inicio de sesión. Luego se leerán en ambos escenarios, ya que se obtienen en el último. También es mejor configurarlos para su usuario individual y no para todo el sistema. por lo tanto, para que estén disponibles tanto para sesiones de shell de inicio de sesión como de no inicio de sesión, defina estas variables en ~/.bashrc . Un ejemplo de la línea para establecer una variable de entorno persistente en el archivo .bashrc se vería así: Que es lo mismo que antes mientras estaba en la línea de comando. La próxima vez que inicie una sesión de shell, sus declaraciones de variables de entorno siempre se leen y pasan al entorno del shell (incluidos los shells secundarios subsiguientes también). Puede forzar su sesión actual para leer el archivo de configuración en cualquier momento escribiendo en una terminal: Para configurarlos en los archivos de todo el sistema, si lo prefiere, haga lo mismo excepto que agregue las definiciones de variables a: /etc/profile , /etc/bash.bashrc o /etc/environment en su lugar.