Difference between revisions of "Environment variables (Español)"
m (corrección de enlace al artículo en español) |
(corrección de enlaces al artículo en español -> Bash (Español) + corrección de plantilla al español) |
||
Line 36: | Line 36: | ||
$ env EDITOR=vim xterm | $ env EDITOR=vim xterm | ||
− | El comando ''set'', de [[Bash]], permite cambiar los valores de las opciones | + | El comando ''set'', de [[Bash (Español)|Bash]], permite cambiar los valores de las opciones |
de shell y colocar los parámetros posicionales, o mostrar los nombres y | de shell y colocar los parámetros posicionales, o mostrar los nombres y | ||
valores de las variables de shell. Para más información, se puede consultar la | valores de las variables de shell. Para más información, se puede consultar la | ||
Line 60: | Line 60: | ||
en sólo algunos archivos particulares. | en sólo algunos archivos particulares. | ||
− | {{Bad translation|(N. de T.) En la versión original se le dice al lector que se asegure de mantener y administrar las variables de entorno. Considero que esta indicación resulta ambigua para la mayoría de los lectores.}} | + | {{Bad translation (Español)|(N. de T.) En la versión original se le dice al lector que se asegure de mantener y administrar las variables de entorno. Considero que esta indicación resulta ambigua para la mayoría de los lectores.}} |
Los siguientes archivos deben ser usados para definir variables de entorno | Los siguientes archivos deben ser usados para definir variables de entorno | ||
Line 70: | Line 70: | ||
* {{ic|/etc/environment}} es usado por el módulo pam_env y es independiente del lenguaje de shell, por lo que no se deben insertar scritps. Este archivo solamente acepta pares de la forma {{ic|1=''variable=valor''}}. Para más detalles se pueden consultar los manuales {{man|8|pam_env}} o {{man|5|pam_env.conf}}. | * {{ic|/etc/environment}} es usado por el módulo pam_env y es independiente del lenguaje de shell, por lo que no se deben insertar scritps. Este archivo solamente acepta pares de la forma {{ic|1=''variable=valor''}}. Para más detalles se pueden consultar los manuales {{man|8|pam_env}} o {{man|5|pam_env.conf}}. | ||
− | * Los archivos de configuración global de [[shell]] inicializan variables y ejecutan scripts. Por ejemplo [[Bash# | + | * Los archivos de configuración global de [[shell]] inicializan variables y ejecutan scripts. Por ejemplo [[Bash (Español)#Archivos de configuración]] o [[Zsh#Startup/Shutdown files]]. |
* {{ic|/etc/profile}} inicializa variables para shells con login solamente. Este archivo sí permite scripts y puede ser usado por todos los shells compatibles con [[wikipedia:Bourne shell|Bash]]. | * {{ic|/etc/profile}} inicializa variables para shells con login solamente. Este archivo sí permite scripts y puede ser usado por todos los shells compatibles con [[wikipedia:Bourne shell|Bash]]. | ||
Line 101: | Line 101: | ||
* {{ic|~/.pam_environment}} es el archivo de usuario equivalente a {{ic|/etc/security/pam_env.conf}} [https://github.com/linux-pam/linux-pam/issues/6], usado por el módulo pam_env. Detalles en {{man|8|pam_env}} y {{man|5|pam_env.conf}}. | * {{ic|~/.pam_environment}} es el archivo de usuario equivalente a {{ic|/etc/security/pam_env.conf}} [https://github.com/linux-pam/linux-pam/issues/6], usado por el módulo pam_env. Detalles en {{man|8|pam_env}} y {{man|5|pam_env.conf}}. | ||
− | * Archivos de configuración de usuario de [[shell]], por ejemplo [[Bash# | + | * Archivos de configuración de usuario de [[shell]], por ejemplo [[Bash (Español)#Archivos de configuración]] o [[Zsh#Startup/Shutdown files]]. |
* {{ic|~/.profile}} es usado por muchos shells como alternativa por defecto, [[wikipedia:Unix shell#Configuration files]]. | * {{ic|~/.profile}} es usado por muchos shells como alternativa por defecto, [[wikipedia:Unix shell#Configuration files]]. | ||
Line 163: | Line 163: | ||
* {{ic|OLDPWD}} contiene la ruta al directorio anterior al actual; esot es, el valor de {{ic|PWD}} andes de ejecutar ''cd''. | * {{ic|OLDPWD}} contiene la ruta al directorio anterior al actual; esot es, el valor de {{ic|PWD}} andes de ejecutar ''cd''. | ||
− | * {{ic|SHELL}} contiene la ruta al [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03 shell del usuario]. Nótese que este no es necesariamente el mismo shell que se está ejecutando, aunque [[Bash]] coloca esta variable al iniciar. | + | * {{ic|SHELL}} contiene la ruta al [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03 shell del usuario]. Nótese que este no es necesariamente el mismo shell que se está ejecutando, aunque [[Bash (Español)|Bash]] coloca esta variable al iniciar. |
* {{ic|TERM}} contiene el tipo de terminal que se está ejecutando, por ejemplo, {{ic|xterm-256color}}. Es usado por programas que se ejecutan en la terminal y que desean ocupar características específicas a cada tipo. | * {{ic|TERM}} contiene el tipo de terminal que se está ejecutando, por ejemplo, {{ic|xterm-256color}}. Es usado por programas que se ejecutan en la terminal y que desean ocupar características específicas a cada tipo. |
Revision as of 21:50, 18 October 2018
Una variable de entorno es un objeto con nombre que contiene información usada por uno o más programas. En términos simples, es una variable con un nombre y un valor. El valor de una variable de entorno puede ser, por ejemplo, la ubicación de todos los archivos ejecutables, el editor por defecto, o las configuraciones regionales del sistema. Puede que esta forma de administrar configuraciones parezca difícil de manejar; sin embargo, las variables de entorno representan un mecanismo simple para compartir configuraciones entre múltiples aplicaciones y procesos en Linux.
Contents
Utilidades
El paquete coreutils contiene los programas printenv y env. Se pueden enlistar las variables de entorno actuales con:
$ printenv
La utilidad env
puede ser usada para ejecutar un comando bajo un
entorno modificado. El siguiente ejemplo ejecutará xterm con la variable
de entorno EDITOR
ajustada a vim
. Esto no afectará a la variable
de entorno global EDITOR
.
$ env EDITOR=vim xterm
El comando set, de Bash, permite cambiar los valores de las opciones de shell y colocar los parámetros posicionales, o mostrar los nombres y valores de las variables de shell. Para más información, se puede consultar la documentación de set: [1].
Cada proceso almacena sus variables de entorno en el archivo
/proc/$PID/environ
, el cuál contiene cada par de nombre y valor
delimitados por un carácter nulo (\x0
). Se pude obtener un formato más
legible con sed, por ejemplo,
sed 's:\x0:\n:g' /proc/$PID/environ
.
Cómo definir variables
Globalmente
La mayoría de las distribuciones de Linux permiten agregar o cambiar las
definiciones de las variables de entorno en /etc/profile
. Existen
también archivos de configuración con variables de entorno específicas para
algunos paquetes, como /etc/locale.conf
. En principio, cualquier script
de shell se puede usar para inicializar variables de entorno, pero siguiendo
convenciones tradicionales de UNIX, estas declaraciones deben estar presentes
en sólo algunos archivos particulares.
Los siguientes archivos deben ser usados para definir variables de entorno
globales: /etc/environment
, /etc/profile
y archivos shell de
configuración específicos. Cada uno de estos archivos tiene diferentes
limitaciones, por lo que se debe seleccionar el adecuado de acuerdo a los
propósitos de la variable.
/etc/environment
es usado por el módulo pam_env y es independiente del lenguaje de shell, por lo que no se deben insertar scritps. Este archivo solamente acepta pares de la formavariable=valor
. Para más detalles se pueden consultar los manuales pam_env(8) o pam_env.conf(5).
- Los archivos de configuración global de shell inicializan variables y ejecutan scripts. Por ejemplo Bash (Español)#Archivos de configuración o Zsh#Startup/Shutdown files.
/etc/profile
inicializa variables para shells con login solamente. Este archivo sí permite scripts y puede ser usado por todos los shells compatibles con Bash.
En este ejemplo se agrega la carpeta ~/bin
al PATH
para el
usuario respectivo. Para hacer esto, solamente es necesario colocar lo
siguiente en un archivo de configuración (/etc/profile
o
/etc/bash.bashrc
):
# Si el ID del usuario es mayor o igual a 1000 y la carpeta ~/bin existe y # aún no se encuentra definida en el $PATH, # entonces se agrega ~/bin al $PATH. if [[ $UID -ge 1000 && -d $HOME/bin && -z $(echo $PATH | grep -o $HOME/bin) ]] then export PATH="${PATH}:$HOME/bin" fi
Por usuario
~/.bashrc
. Esto significa que, por ejemplo, programas activados por dbus, como los archivos de Gnome no las usarán por defecto. Consulte Systemd/User#Environment variables.No siempre se requiere definir una variable de entorno de manera global. Por
ejemplo, se puede querer agregar /home/my_user/bin
a la variable
PATH
pero sin querer que todos los demás usuarios lo tengan en su
PATH
también. Las variables de entorno locales se pueden definir en
muchos archivos distintos:
~/.pam_environment
es el archivo de usuario equivalente a/etc/security/pam_env.conf
[2], usado por el módulo pam_env. Detalles en pam_env(8) y pam_env.conf(5).
- Archivos de configuración de usuario de shell, por ejemplo Bash (Español)#Archivos de configuración o Zsh#Startup/Shutdown files.
~/.profile
es usado por muchos shells como alternativa por defecto, wikipedia:Unix shell#Configuration files.
Para agregar una carpeta al PATH
para uso local, se puede colocar lo
siguiente en ~/.bash_profile
:
export PATH="${PATH}:/home/nombre_de_usuario/bin"
Para actualizar la variable es necesario volver a iniciar sesión o evaluar el
archivo como un script: $ source ~/.bash_profile
.
Aplicaciones gráficas
Para colocar variables de entorno para aplicaciones gráficas, se pueden colocar las variables en xinitrc (o xprofile cuando se utiliza un administrador gráfico), por ejemplo:
~/.xinitrc
export PATH="${PATH}:~/scripts" export GUIVAR=value
Por sesión
En algunas ocasiones se necesitan definiciones aún más estrictas. Se puede querer correr temporalmente ejecutables desde un directorio específico sin tener que escribir la ruta absoluta de cada uno, o editar el archivo de configuración de shell para el poco tiempo que se ocuparán.
En estos casos, se puede definir la variable PATH
solamente en la
sesión actual, usando el comando export. Mientras no se cierre la sesión,
la variable PATH
usará las configuraciones temporales. Para agregar
una carpeta al PATH
específico de una sesión se debe ejecutar:
$ export PATH="${PATH}:/home/nombre_de_usuario/tmp/usr/bin"
Ejemplos
Esta sección enlista algunas variables de entorno comunes usadas por un sistema Linux y describe sus valores.
DE
indica el entorno de escritorio que está siendo usado (por sus siglas en inglés, Desktop Enviroment). xdg-open la usa para seleccionar las aplicaciones por defecto según el entorno. Para usar esta característica se necesitan instalar algunos paquetes adicionales: para GNOME, libgnomeAUR; para Xfce, exo. Algunos valores comunes para la variableDE
son:gnome
,kde
,xfce
,lxde
andmate
.
- La variable de entorno
DE
necesita ser exportada antes de iniciar el administrador de ventanas. Por ejemplo:
~/.xinitrc
export DE="xfce" exec openbox
- Esto hará que xdg-open use exo-open (el cuál es más amigable con el usuario) porque asume que está corriendo dentro de Xfce. Se puede utilizar exo-preferred-applications para configurar.
PATH
contiene una lista, separada por dos puntos, de directorios en los que el sistema buscará archivos ejecutables. Cuando un comando normal (por ejemplo, ls, rc-upadte o ic|emerge) es interpretado por el shell (por ejemplo, bash o zsh), este busca un archivo ejecutable con el mismo nombre en los directorios delPATH
y lo ejecuta. Para correr un ejecutable cuyo directorio no está enlistado en elPATH
, se debe escribir la ruta completa:/bin/ls
.
.
) en el PATH
: se puede conducir al usuario a ejecutar archivos malignos.
HOME
contiene la ruta del directorio del usuario actual. Esta variable puede ser usada por las aplicaciones para asociar archivos de configuración (entre otros) al usuario actual.
PWD
contiene la ruta al directori actual.
OLDPWD
contiene la ruta al directorio anterior al actual; esot es, el valor dePWD
andes de ejecutar cd.
SHELL
contiene la ruta al shell del usuario. Nótese que este no es necesariamente el mismo shell que se está ejecutando, aunque Bash coloca esta variable al iniciar.
TERM
contiene el tipo de terminal que se está ejecutando, por ejemplo,xterm-256color
. Es usado por programas que se ejecutan en la terminal y que desean ocupar características específicas a cada tipo.
PAGER
contiene el comando para correr el programa con el que se enlista el contenido de un archivo, por ejemplo,/bin/less
.
EDITOR
contiene el comando para ejecutar el editor ligero de archivos de texto. Por ejemplo, se puede escribir un cambio interactivo entre gedit bajo X o nano:
export EDITOR="$(if [[ -n $DISPLAY ]]; then echo 'gedit'; else echo 'nano'; fi)"
VISUAL
contiene el comando para ejecutar el editor de texto usado para tareas más demandantes, tal como editar correo (por ejemplo,vi
, vim, emacs etcétera).
MAIL
contiene la ubicación de los correos electrónicos de entrada. La configuración tradicional es/var/spool/mail/$LOGNAME
.
BROWSER
contiene la ruta al navegador web. Es útil establecerla en un archivo de configuración de shell de manera que cambie de manera dinámica según el entorno gráfico:
if [ -n "$DISPLAY" ]; then export BROWSER=firefox else export BROWSER=links fi
ftp_proxy
yhttp_proxy
contienen servidores FTP y HTTP, respectivamente:
ftp_proxy="ftp://192.168.0.1:21" http_proxy="http://192.168.0.1:80"
MANPATH
contiene una lista separada por dos puntos con directorios en los cuales man busca páginas de manuales.
/etc/profile
hay un comentario que dice «Man es mucho mejor que nosotros en averiguar esto», por lo que, generalmente, es mucho mejor dejar esta variable con su valor por defecto: /usr/share/man:/usr/local/share/man
INFODIR
contiene una lista de directorios en los cuales el comando info busca páginas de información, por ejemplo,/usr/share/info:/usr/local/share/info
.
TZ
Se puede usar para colocar una zona horaria, distinta de la del sistema, a un usuario.. Las zonas enlistadas en/usr/share/zoneinfo/
se pueden usar como referencia.