Uso el sourcecomando 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 sourcepara desarmar las variables?
Resultados previstos
echo $linuxmachine01
< no output >
bash
shell-script
source
yael
fuente
fuente

sourceeso lo que establece las variables en su entorno, sino lasexportdeclaraciones en el archivo que ustedsource. Entonces, lo opuesto asourcepodría sersource, si tienesourceun archivo diferente que tieneunsettodas las mismas variables.exports. Todo lo queexporthace 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
exporty luego imprima el segundo campo.unset $(...)Esto ejecuta el comando dentro
$(...), captura su stdout y desarma cualquier variable nombrada por su salida.fuente
filees una declaración de exportación.No puedes deshacer
sourceel 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
exports.Puede usar el
unsetcomando 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 linuxmachinesrevertir.Puede escribir su linuxmachines_mount_point.txt de esta manera
Cuando necesitas tus variables
Cuando quieras eliminar las variables
fuente
Si está utilizando el
sourcecomando para activar aVirtualEnvironment, puede salir usando el comandodeactivate.fuente