Uso el source
comando en mi script bash para leer / imprimir los valores de las variables
more linuxmachines_mount_point.txt
export linuxmachine01="sdb sdc sdf sdd sde sdg"
export linuxmachine02="sde sdd sdb sdf sdc"
export linuxmachine03="sdb sdd sdc sde sdf"
export linuxmachine06="sdb sde sdf sdd"
source linuxmachines_mount_point.txt
echo $linuxmachine01
sdb sdc sdf sdd sde sdg
¿Qué es lo opuesto source
para desarmar las variables?
Resultados previstos
echo $linuxmachine01
< no output >
bash
shell-script
source
yael
fuente
fuente
source
eso lo que establece las variables en su entorno, sino lasexport
declaraciones en el archivo que ustedsource
. Entonces, lo opuesto asource
podría sersource
, si tienesource
un archivo diferente que tieneunset
todas las mismas variables.export
s. Todo lo queexport
hace es copiar los valores en el entorno, pero están presentes como variables de shell, estén o no definidos también como variables de entorno. Además, la definición de variables de entorno innecesarias acorta la longitud máxima de la línea de comandos, ya que se almacenan en el mismo espacio (¡limitado!) Por proceso.Respuestas:
Usando una subshell (Recomendado)
Ejecute el comando de origen en una subshell:
Subcapas se definen por parens:
(...)
. Cualquier variable de shell establecida dentro de la subshell se olvida cuando la subshell finaliza.Usando unset
Esto desarma cualquier variable exportada por
linuxmachines_mount_point.txt
:-F'[ =]+'
le dice a awk que use cualquier combinación de espacios y signos de igual como separador de campo./^export/{print $2}
Esto le dice a awk que seleccione líneas que comiencen
export
y luego imprima el segundo campo.unset $(...)
Esto ejecuta el comando dentro
$(...)
, captura su stdout y desarma cualquier variable nombrada por su salida.fuente
file
es una declaración de exportación.No puedes deshacer
source
el guión.Lo que puede hacer es almacenar todas las variables exportadas en un archivo temporal, compararlo con las variables después de obtener el script y luego eliminar el desbordamiento con
unset
, por ejemplo:fuente
export
s.Puede usar el
unset
comando para "olvidar" las variables.fuente
La solución más simple para tener el resultado que espera (nada) es volver a declarar la variable como vacía:
Por supuesto, la variable aún está definida (y exportada), vacía pero definida:
Para eliminar correctamente la variable tanto del entorno como del shell en ejecución, debe usar unset (la forma recomendada):
fuente
La forma más sencilla de hacer esto es modificar su script para que también defina un comando para deshacer el efecto del script:
fuente
declare -A linuxmachines=( [01]="sdb sdc sdf" [02]="sde sdd sdb" [03]="whatever" )
entonces es solounset linuxmachines
revertir.Puede escribir su linuxmachines_mount_point.txt de esta manera
Cuando necesitas tus variables
Cuando quieras eliminar las variables
fuente
Si está utilizando el
source
comando para activar aVirtualEnvironment
, puede salir usando el comandodeactivate
.fuente