¿Cómo exportar las variables que están configuradas, todas a la vez?

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

>set a=123 b="asd asd" c="hello world" 

Comentarios

  • ¿Qué quieres decir con exportar ¿de repente? puede usar punto y coma para definir en una línea … como a = 123; b = " asd asd "; c = " hello world "
  • Muy similar a unix.stackexchange .com / q / 79064/4667
  • set también muestra funciones y variables del sistema como BASH_VERSION
  • Su pregunta no es clara . ¿Es un extracto del set resultado que ' estás mostrando? Si es así, entonces ' no es bash ' s. ¿Desea exportar todas las variables establecidas actualmente, incluidas las variables especiales de shell? ¿O solo esas 3 variables como en export a b c?
  • export ${!T*} exportarían cualquier parámetro definido cuyo nombre comience con T. Desafortunadamente, no ' parece ser una forma de generar fácilmente una lista de todos parámetros definidos.

Responder

Ejecute el siguiente comando, antes de configurar las variables:

set -a 

man página:

-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 +a después.

Ejemplo:

set -a . ./environment set +a 

Donde environment contiene:

FOO=BAR BAS="quote when using spaces" 

Comentarios

  • Sin embargo, esto debe estar habilitado antes de asignar variables. No ' no hace nada a las variables asignadas previamente.
  • @chepner, ¡Gracias, olvidé mencionar eso!
  • Esto también automáticamente exporta funciones de la misma manera que function example(){ echo good; }; export -f example

Respuesta

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

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 subir el shell actual con todos esos problemas de vars env

source /my/env/var/file 

Respuesta

`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 las variables de entorno, separados por espacio: awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}" Referencia: awk-Printing column valu e sin una nueva línea y agregando una coma y https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside-awk-command

  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" ... compile un comando que queramos, luego use « para ejecutarlo. Eso es todo: p.

Comentarios

  • Bienvenido a U & L SE. Tal vez puedas editar tu publicación y dar alguna explicación.
  • No es ' correcto asumir que los nombres de las variables de entorno constarán únicamente de 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_]*. Hay algunas variaciones de esto según el shell que ' reutilización, pero este es el enfoque seguro / portátil.
  • Buen punto @ChrisJohnson – ¡actualizado!

Respuesta

Puedes anteponer export al nombre de la variable mediante awk y eval el resultado resultante:

eval $(printenv | awk -F= "{ print "export " $1 }") 

Comentarios

  • printenv imprime las variables que ya se exportaron. Eso también ganó ' t apoyo de trabajo erly si hay variables que contienen caracteres de nueva línea.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *