borrar todas las variables sin cerrar el terminal

10

¿Quiero saber cómo borrar todas las variables que definí en el símbolo del sistema sin cerrar el terminal?

por ejemplo, si configuro una variable en el símbolo del sistema como:

$ a=1

ahora quiero eliminar la variable $a(y muchas otras variables definidas de manera similar) sin cerrar el terminal. Podría usar, unsetpero será agitado si hay grandes no. de variables

Edward Torvalds
fuente
2
exec "$0"tal vez, pero es difícil decir qué quiere decir con global .
mikeserv
3
¿Por qué quieres hacer eso?
Hauke ​​Laging
1
@HaukeLaging Estoy trabajando con matrices usando script. A veces le agrego un elemento. por lo que no puedo ejecutar el script con valores antiguos (ya que se cambia la matriz). Tengo que cerrar el terminal y comenzar una nueva sesión nuevamente. Espero haberlo dejado claro. si no, por favor hágamelo saber :)
Edward Torvalds
1
@muru: obtiene una lista guardada en un archivo $varcon y var=$(declare -p +F);luego la pasa como un argumento a una función que sí. echo "${2%%=*}".Esa respuesta tiene algunos problemas con el tamaño, pero debería funcionar si su entorno no es enorme.
mikeserv
3
No tengo idea de lo que estás tratando de hacer. ¿Estás hablando de un shell interactivo o un script? Las variables establecidas en un script ejecutado desde un shell interactivo no afectan al shell padre. Dinos qué quieres lograr, no qué callejón sin salida estás persiguiendo .
Gilles 'SO- deja de ser malvado'

Respuestas:

9

Si lo hace (GNU coreutils)

exec env --ignore-environment /bin/bash

usarás un ambiente nuevo y fresco

Gilles Quenot
fuente
¿qué pasa exec "$0"?
Edward Torvalds
@edwardtorvalds $0es el argumento cero para un shell ejecutado. Entonces, si está ejecutando bash $0es bash (probablemente, podría estar -bashen un -lcaso de shell ogin dependiendo de la versión) . Si está ejecutando un script con un punto de #!/bin/bashreferencia, $0es la ruta al script. exec "$0"es probablemente más flexible, pero exec bashes más explícito. Si ingresa ese comando en una terminal, bashdebe reconocer que está en un entorno interactivo y hacer el equivalente de bash -i- lo que hará que su ~/.bashrcarchivo también se ejecute.
mikeserv
Esto no ayuda export a=123, esa variable se hereda ...
stimur
1

Puede usar env, que es proporcionado por GNU coreutils (generalmente preinstalado en sistemas GNU / Linux):

exec env --ignore-environment /bin/bash

La llamada al sistema ejecutivo es para que su proceso actual sea reemplazado en el lugar por la nueva versión de su shell sin entorno.

Esto tiene el beneficio de borrar también cualquier variable de entorno exportada .

usuario30747
fuente
Pero esto borraría mi variable PATH modificada, por ejemplo export PATH=$PATH:~/foo, ¿verdad?
Edward Torvalds
Tienes razón. Modifiqué mi respuesta para que se use la ruta absoluta del shell en lugar de $ 0.
user30747
Gracias al usuario 30747, robó su respuesta para corregir la mía. No se puede eliminar la respuesta aceptada
Gilles Quenot