2010-07-27 13 views

Respuesta

17

Citando this source,

variables estándar UNIX se dividen en variables de dos categorías, variables de entorno y Shell. En términos generales, las variables de shell se aplican solo a la instancia actual del shell y son utilizadas para establecer las condiciones de funcionamiento a corto plazo ; las variables de entorno tienen un significado de mayor alcance, y las establecidas al iniciar sesión son válidas para la duración de la sesión . Por convenio , las variables de entorno tienen MAYÚSCULAS y las variables de shell tienen minúsculas.

Para enumerar todas las variables de entorno, utilice printenv y para enumerar todas las variables de shell, use set.

Se habrá dado cuenta de que las variables de entorno almacenan valor más permanente, por ejemplo:

HOME=/home/adam 

Qué cambia muy pocas veces, mientras que las variables de shell almacena los valores locales, temporales, de caparazón específico, por ejemplo:

PWD=/tmp 

que cambia cada vez que cambia su directorio actual.

Para la mayoría de las tareas prácticas, establezca valores de entorno agregando export VARIABLE_NAME=VALUE a su archivo ~/.bashrc.

+0

variable de entorno están definidas por el usuario? y las variables de la carcasa son definición del sistema? También mencionó los comandos, no la ubicación, ¿dónde está ubicada la variable? – sunil

+0

¿Qué quiere decir con 'Donde se encuentran las variables'? ¿Dónde se establece su valor o dónde se almacenan (técnicamente) en la memoria de la computadora? –

+0

cualquier archivo está allí donde están almacenados && ¿están definidos por el usuario o predefinidos – sunil

-1

Una variable de shell es solo un caso especial de una variable de entorno. variables de shell se heredan del medio ambiente y posiblemente copian en el entorno de los niños de la cáscara en función de la sintaxis utilizada: http://www.pixelbeat.org/docs/env.html

+2

Esto no es correcto. Básicamente tienes los términos invertidos. Obviamente, hay mucha confusión sobre este tema, incluso por usuarios veteranos y un desarrollador coreutils. : -/ – deltaray

+1

No creo que haya revertido los términos. Estaba dando a entender que la lista de entornos es más fundamental y está presente para todos los procesos, incluidos los shells. las variables de shell son un caso especial que se inicializan _desde_ la lista de entornos – pixelbeat

9

Su diferencia es similar a la diferencia entre los campos privados y campos protegidos de una clase Java.

Los campos privados de una clase Java solo son accesibles desde esa clase Java. Los campos protegidos de una clase Java son accesibles tanto desde la clase Java como desde sus subclases.

Las variables de shell de un shell solo son accesibles desde ese proceso de shell. Se puede acceder a las variables de entorno exportadas desde ese shell tanto desde ese proceso de shell como desde los subprocesos creados desde ese shell.

2

Para Bash shell:

variables de shell difieren de las variables de entorno de distintas maneras:

♦ Una variable shell es específico para el mismo cuerpo de recubrimiento y no se hereda por procesos secundarios.Por ejemplo, digamos que se está ejecutando otra aplicación de la cáscara, que la aplicación no heredará la variable de shell:

$ SHELL_VAR=xyz 
$ firefox 

SHELL_VAR no estarán disponibles en el entorno del proceso hijo (Firefox).

♦ Por el contrario, las variables de entorno del proceso padre (la cáscara aquí) son heredados por todos los procesos hijos: variables de

$ export SHELL_VAR=xyz 
$ firefox 

♦ Tanto la cáscara y el medio ambiente local de la cáscara/proceso que los definió:

Las variables de entorno pueden ser persistentes, mientras que para las variables de shell una vez que sale de la sesión, se han ido todas.

Nota: los ejemplos anteriores solo alteran el shell en el que está trabajando, en otras palabras, si cierra sesión o inicia un nuevo shell/terminal no verá las variables que definió, esto es por el principio de localidad de proceso.


Cómo hacer que las variables de shell presistent:

Una forma de hacer esto es mediante la modificación del archivo ~/.profile:

export SHELL_VAR=xyz 

Esta configuración es específica del usuario y no en todo el sistema, para las variables de entorno de todo el sistema, puede agregar la línea anterior a un archivo .sh .sh en /etc/profile.d

le recomiendo leer esta página: EnvironmentVariables

Cuestiones relacionadas