¿Cómo exportar las variables que se establecen, todas a la vez?

39

setEl comando muestra todas las variables locales como a continuación. ¿Cómo exporto todas estas variables a la vez?

>set
a=123
b="asd asd"
c="hello world"
Neerav
fuente
¿Qué quieres decir exportar todo a la vez? puedes usar punto y coma para definir en una línea ... como a = 123; b = "asd asd"; c = "hola mundo"
Raza
Muy similar a unix.stackexchange.com/q/79064/4667
glenn jackman
2
settambién muestra funciones y variables del sistema como BASH_VERSION
glenn jackman
Tu pregunta no está clara. ¿Es ese un extracto de la setproducción que estás mostrando? Si es así, entonces no lo bashes. ¿Desea exportar todas las variables establecidas actualmente, incluidas las variables de shell especiales? ¿O solo esas 3 variables como en export a b c?
Stéphane Chazelas
export ${!T*}exportaría cualquier parámetro definido cuyo nombre comience por T. Desafortunadamente, no parece haber una manera de generar fácilmente una lista de todos los parámetros definidos.
chepner

Respuestas:

72

Ejecute el siguiente comando, antes de configurar las variables:

set -a 

página man:

-a
Cuando esta opción está activada, el atributo de exportación se establecerá para cada variable a la que se realiza una asignación;

Para desactivar esta opción, ejecute set +adespués.

Ejemplo:

set -a
. ./environment
set +a

Donde environmentcontiene:

FOO=BAR
BAS='quote when using spaces'
nitina
fuente
13
Sin embargo, esto debe estar habilitado antes de asignar a las variables. No hace nada a las variables asignadas previamente.
chepner
1
@chepner, ¡Gracias, olvidé mencionar eso!
nitin
Esto también exporta automáticamente las funciones de la misma manera quefunction example(){ echo good; }; export -f example
Oliver I
5
`echo "export" $((set -o posix ; set)|awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}')`
  1. Primero, obtenga todas las variables de entorno establecidas: (set -o posix ; set) Referencia: https://superuser.com/questions/420295/how-do-i-see-a-list-of-all-currently-defined-environment-variables-in-a- linux-ba

  2. Obtenga todos los nombres de variables de entorno, separados por espacio: awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}' Referencia: awk-Imprimiendo el valor de la columna sin nueva línea y agregando comas y https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside- comando awk

  3. Ahora, necesitamos exportar estas variables, pero xargs no puede hacer esto porque bifurca el proceso hijo, la exportación debe ejecutarse en el proceso actual. echo "export" ...construimos un comando que queremos, luego usamos `` para ejecutarlo. Eso es todo: p.

Oso huang
fuente
Bienvenido a U&L SE. Tal vez puedas editar tu publicación y dar alguna explicación.
Archemar
1
No es correcto asumir que los nombres de las variables de entorno consistirán únicamente en az y AZ. Por lo general, también incluyen guiones bajos y dígitos, por lo que el patrón sería [a-zA-Z_][a-zA-Z0-9_]*. Existen algunas variaciones sobre esto en función del shell que está utilizando, pero este es el enfoque seguro / portátil.
Chris Johnson
Buen punto @ChrisJohnson - ¡actualizado!
Wil Moore III
3

Puede anteponer exportel nombre de la variable vía awky evalla salida resultante:

eval $(printenv | awk -F= '{ print "export " $1 }')
Wil Moore III
fuente
2
printenvimprime las variables que ya se exportaron. Eso tampoco funcionará correctamente si hay variables que contienen caracteres de nueva línea.
Stéphane Chazelas
2

Esto funciona si su shell es bash (posiblemente también otros shells)

export > /my/env/var/file

su nuevo archivo contendrá un volcado de todas las variables definidas actualmente ... con entradas como

declare -x PORT="9000"
declare -x PORT_ADMIN="3001"
declare -x PORT_DOCKER_REGISTRY="5000"
declare -x PORT_ENDUSER="3000"
declare -x PRE_BUILD_DIR="/cryptdata6/var/log/tmp/khufu01/loud_deploy/curr/loud-build/hygge"
declare -x PROJECT_ID="hygge"
declare -x PROJECT_ID_BUSHIDO="bushido"

luego para levantar el shell actual con todos esos problemas ambientales

source  /my/env/var/file
Scott Stensland
fuente