Soy un poco nuevo en Linux y ejecuto algunos comandos a ciegas para hacer las cosas. Pensé que no sería un desperdicio hacer este tipo de preguntas, ya que más personas nuevas tendrían un conocimiento regular sobre ellas.
Comencé a trabajar con Jenkins recientemente y luego tuve que usar este export
comando para ejecutar el archivo de guerra de Jenkins . Así que necesitaba saber qué export
hace el comando en general, y por qué necesitamos ejecutar este comando, mientras se ejecuta Jenkins (después de que se establece la casa de Jenkins).
¡Gracias!
shell
unix
command
environment-variables
Chathura Kulasinghe
fuente
fuente
Respuestas:
export
insh
y shells relacionados (comobash
), marca una variable de entorno para exportar a procesos secundarios, de modo que el niño los herede.export
se define en POSIX :fuente
Supongo que viene de un fondo de Windows. Así que los contrastaré (yo también soy un poco nuevo en Linux). Encontré la respuesta del usuario a mi comentario, útil para resolver las cosas.
En Windows, una variable puede ser permanente o no. El término variable de entorno incluye una variable establecida en el shell cmd con el comando SET, así como cuando la variable se establece dentro de la GUI de Windows, por lo que se establece en el registro y se vuelve visible en nuevas ventanas cmd. por ejemplo, documentación para el comando set en Windows https://technet.microsoft.com/en-us/library/bb490998.aspx "Muestra, establece o elimina variables de entorno. Si se utiliza sin parámetros, set muestra la configuración actual del entorno". En Linux, set no muestra variables de entorno, muestra variables de shell a las que no llama / se refiere como variables de entorno. Además, Linux no usa set para establecer variables (aparte de los parámetros posicionales y las opciones de shell, que explico como una nota al final), solo para mostrarlas e incluso entonces solo para mostrar variables de shell. Windows usa set para configurar y mostrar, por ejemplo, set a = 5, linux no.
En Linux, supongo que se podría hacer un script que los conjuntos de variables en el arranque, por ejemplo,
/etc/profile
o/etc/.bashrc
pero por lo demás, no son permanentes. Están almacenados en RAM.En Linux, existe una distinción entre variables de shell y variables de entorno. En Linux, las variables de shell están solo en el shell actual y las variables de entorno están en ese shell y en todos los shells secundarios.
Puede ver las variables de shell con el
set
comando (aunque tenga en cuenta que, a diferencia de Windows, las variables no se configuran en Linux con el comando set).set -o posix; set
(hacer ese set -o posix una vez primero, ayuda a no mostrar demasiadas cosas innecesarias). Entoncesset
muestra variables de shell.Puede ver las variables de entorno con el
env
comandolas variables de shell se establecen con, por ejemplo, solo
a = 5
las variables de entorno se establecen con la exportación, la exportación también establece la variable de shell
Aquí puede ver la variable de shell zzz configurada con zzz = 5, y verá que se muestra cuando se ejecuta
set
pero no se muestra como una variable de entorno.Aquí vemos yyy configurado con export, por lo que es una variable de entorno. Y vea que se muestra tanto en variables de shell como en variables de entorno
$ zzz=5 $ set | grep zzz zzz=5 $ env | grep zzz $ export yyy=5 $ set | grep yyy yyy=5 $ env | grep yyy yyy=5 $
otros hilos útiles
/unix/176001/how-can-i-list-all-shell-variables
/ubuntu/26318/environment-variable-vs-shell-variable-whats-the-difference
Nota: un punto que se elabora un poco y es algo correctivo de lo que he escrito, es que, en linux bash, 'set' se puede usar para establecer "parámetros posicionales" y "opciones / atributos de shell", y técnicamente ambos esas son variables, aunque es posible que las páginas de manual no las describan como tales. Pero aún así, como se mencionó, set no establecerá variables de shell o variables de entorno). Si lo hace
set asdf
, establece $ 1 en asdf, y si lo haceecho $1
, ve asdf. Si lo hacesset a=5
no establecerá la variable a, igual a 5. Establecerá el parámetro posicional $ 1 igual a la cadena de "a = 5". Entonces, si alguna vez vio el conjunto a = 5 en Linux, probablemente sea un error a menos que alguien realmente quiera esa cadena a = 5, en $ 1. La otra cosa que puede establecer el conjunto de Linux son las opciones / atributos de shell. Si establece -o, verá una lista de ellos. Y puede hacer, por ejemploset -o verbose
, off, para activar verbose (por cierto, el valor predeterminado está desactivado, pero eso no hace ninguna diferencia). O puede hacerset +o verbose
para desactivar verbose. Windows no tiene tal uso para su comando set.fuente
En términos simples, las variables de entorno se establecen cuando abre una nueva sesión de shell. En cualquier momento, si cambia alguno de los valores de las variables, el shell no tiene forma de seleccionar ese cambio. eso significa que los cambios que realizó se harán efectivos en nuevas sesiones de shell. El
export
comando, por otro lado, brinda la capacidad de actualizar la sesión de shell actual sobre el cambio que realizó en la variable exportada. No tiene que esperar hasta una nueva sesión de shell para usar el valor de la variable que cambió.fuente
a=5
entoncesecho $a
entonces dice 5. Sin embargo, escribió "en cualquier momento si cambia alguno de los valores de las variables, el shell no tiene forma de seleccionar ese cambio. Eso significa que los cambios que hizo se harán efectivos en nuevas sesiones de shell". . <- Entonces, ¿cómo se actualizó la sesión de shell sin una exportación? ¿Puede dar un ejemplo de dónde es necesaria la exportación?