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
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}")`
-
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 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 -
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.
set
también muestra funciones y variables del sistema como BASH_VERSIONset
resultado que ' estás mostrando? Si es así, entonces ' no esbash
' s. ¿Desea exportar todas las variables establecidas actualmente, incluidas las variables especiales de shell? ¿O solo esas 3 variables como enexport a b c
?export ${!T*}
exportarían cualquier parámetro definido cuyo nombre comience conT
. Desafortunadamente, no ' parece ser una forma de generar fácilmente una lista de todos parámetros definidos.