Je veux savoir comment effacer toutes les variables que j'ai définies dans l'invite de commande sans fermer le terminal?
par exemple, si je définis une variable dans l'invite de commande comme:
$ a=1
maintenant je veux supprimer la variable $a
(et de nombreuses autres variables définies de manière similaire) sans fermer le terminal. Je pourrais l'utiliser unset
mais ce sera mouvementé s'il n'y en a pas grand. de variables
shell
environment-variables
Edward Torvalds
la source
la source
exec "$0"
peut-être - mais il est difficile de dire ce que vous entendez par global .$var
avecvar=$(declare -p +F);
puis le transmet comme argument à une fonction qui le fait.echo "${2%%=*}".
Cette réponse a quelques problèmes avec la taille - mais cela devrait fonctionner si votre environnement n'est pas énorme.Réponses:
Si vous le faites (GNU coreutils)
vous utiliserez un nouvel environnement
la source
exec "$0"
?$0
est l'argument zéro pour un shell exécuté. Donc, si vous exécutezbash
$0
estbash
(probablement - cela pourrait être-bash
dans un-l
cas de shell ogin selon la version) . Si vous exécutez un script avec une#!/bin/bash
bangline,$0
c'est le chemin d'accès au script.exec "$0"
est probablement plus flexible, maisexec bash
est plus explicite. Si vous entrez cette commande sur un terminal, vous devezbash
reconnaître qu'elle se trouve dans un environnement interactif et faire l'équivalent debash -i
- qui permettra également d'~/.bashrc
exécuter votre fichier.export a=123
, cette variable est héritée ...Vous pouvez utiliser
env
, qui est fourni par GNU coreutils (généralement préinstallé sur les systèmes GNU / Linux):exec env --ignore-environment /bin/bash
L'appel système exec est fait pour que votre processus actuel soit remplacé sur place par la nouvelle version sans environnement de votre shell.
Cela a l'avantage de supprimer également toutes les variables d'environnement exportées .
la source
export PATH=$PATH:~/foo
, non?