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.
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.
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:
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.Respuestas:
Ejecute el siguiente comando, antes de configurar las variables:
página man:
Para desactivar esta opción, ejecute
set +a
después.Ejemplo:
Donde
environment
contiene:fuente
function example(){ echo good; }; export -f example
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-baObtenga 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 awkAhora, 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.fuente
[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íaawk
yeval
la salida resultante:fuente
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)
su nuevo archivo contendrá un volcado de todas las variables definidas actualmente ... con entradas como
luego para levantar el shell actual con todos esos problemas ambientales
fuente