set
El 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"
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 +a
después.
Ejemplo:
set -a
. ./environment
set +a
Donde environment
contiene:
FOO=BAR
BAS='quote when using spaces'
function example(){ echo good; }; export -f example
`echo "export" $((set -o posix ; set)|awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $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
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
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.
[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.
Puede anteponer export
el nombre de la variable vía awk
y eval
la salida resultante:
eval $(printenv | awk -F= '{ print "export " $1 }')
printenv
imprime las variables que ya se exportaron. Eso tampoco funcionará correctamente si hay variables que contienen caracteres de nueva línea.
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
set
también muestra funciones y variables del sistema como BASH_VERSIONset
producción que estás mostrando? Si es así, entonces no lobash
es. ¿Desea exportar todas las variables establecidas actualmente, incluidas las variables de shell especiales? ¿O solo esas 3 variables como enexport a b c
?export ${!T*}
exportaría cualquier parámetro definido cuyo nombre comience porT
. Desafortunadamente, no parece haber una manera de generar fácilmente una lista de todos los parámetros definidos.