Cuando verifico el entorno de mi sistema, aparecerán muchas variables ambientales. ¿Cómo puedo buscar una variable en particular?
Un libro que estoy leyendo dice:
A veces, el número de variables en su entorno crece bastante, tanto que no desea ver todos los valores que se muestran cuando está interesado en uno solo. Si este es el caso, puede usar el
echo
comando para mostrar el valor actual de una variable de entorno.
¿Cómo hago esto en un terminal de Linux?
command-line
environment-variables
iLearnSlow
fuente
fuente
echo
es una mala elección de un comando, ya que podría transformar el contenido de la variable. Producirá el contenido del parámetro de shell con el mismo nombre. Eso no es necesariamente lo mismo si se usa el shell Bourne o para entornos como1
,*
por ejemplo. Y no puede usar ese enfoque para los entornos cuyo nombre no es válido como nombre de variable de shell.printenv VAR
los mostrará a todos (al menos para la implementación de GNU).Al ejecutar:
printenv
Verá todas las variables de entorno. Para más información puedes echar un vistazo a:
https://www.digitalocean.com/community/tutorials/how-to-read-and-set-environmental-and-shell-variables-on-a-linux-vps
fuente
printenv
variablename
se mostrará solo la variable nombrada; por ejemplo,printenv HOME
hará aproximadamente lo mismo queecho "$HOME"
.Es importante comprender que cada proceso tiene su propio conjunto de variables de entorno.
Cuando un proceso llama a la
fork()
llamada del sistema, se crea un segundo proceso (el hijo ) idéntico al primero ( el padre ) (esta copia incluye el entorno, que reside justo encima de la pila (o justo debajo, dependiendo de cómo piense en las pilas:-)
) pero en unix / linux la pila crece hacia abajo desde las direcciones de altura).Por lo general, el proceso secundario llamará a la llamada del
execve()
sistema, que desechará todo en su memoria (virtual) y reconstruirá a partir de las secciones de código y datos en el archivo binario especificado.Sin embargo, cuando reconstruye la pila, copia el entorno y las cadenas de argumentos pasadas a
execve()
la pila primero (en ese orden), antes de llamar a lamain()
función (gran parte del trabajo se realiza en elcrt0
código de arranque después de losexecve()
retornos (a la entrada punto especificado en el binario)).Hay envoltorios para la
execve()
llamada al sistema en la biblioteca C que pasará el entorno actual (es decir, una copia del entorno de los padres), en lugar de que la persona que lo llama lo proporcione (de modo que el hijo heredará el entorno de los padres) - veaenviron(7)
.Intente ejecutar (como root) el comando
ps axeww | less
... ¡esto le mostrará el entorno para todos los procesos! Una interesante es la identificación del proceso 1 (es decir, lainit
proceso: el primer proceso creado por el núcleo en el momento del arranque).Si desea ver el entorno para un proceso específico (y sabe que es la identificación del proceso), intente ejecutar el comando
cat /proc/<PID>/environ
(reemplazar<PID>
con la identificación del proceso).Tenga en cuenta que si un proceso tiene suficientes privilegios, puede reescribir su propia pila, lo que puede dificultar saber cuál es su entorno: verá algunos procesos de daemon como este en la salida ps.
Pero al final, todo este waffle se reduce a lo que @chaos dijo anteriormente, si desea ver el valor actual de una variable de entorno específica en su proceso de shell, simplemente use el comando
echo "$<NAME>"
( incorporado) (reemplazando<NAME>
con el nombre del variable de entorno que le interese) ... solo tenga en cuenta que la misma variable puede tener un valor diferente, o no existir, en otro proceso.fuente
e
opciónps
y el/proc/…/environ
archivo especial pueden no existir en todos los sistemas. (2) AFAIK, cada proceso de Unix tiene el privilegio de reescribir su pila y modificar sus variables de entorno. (3) Para más discusión, vea ¿ A quién pertenecen las variables de entorno? (en Super Usuario ).ps
... pero ahora que ha resaltado este punto, no puedo recordar por qué pensaba que.Puede obtener lo que está buscando con
export
:Mostrará el contenido de la
$HOME
variable.fuente
si tiene que configurar muchos vars:
después de haberlos configurado:
que mostrar lo que se ha configurado:
De esta manera, pronto se encontrará trabajando con varios conjuntos de vars de shell predefinidos en archivos cnf, que combinados con tmux lo convertirán en el maestro de la gestión de la configuración en entornos de shell:
fuente