90 votes

Comment annuler ou se débarrasser d'une fonction bash ?

Si vous définissez ou exportez une variable d'environnement dans bash, vous pouvez non activé il. Si vous définissez un alias dans bash, vous pouvez unalias il. Mais il ne semble pas y avoir de sans fonction .

Considérons par exemple cette fonction bash (triviale), placée dans un fichier .bash_aliases et lu à l'initialisation de Shell.

function foo () { echo "bar" ; }

Comment puis-je effacer cette définition de fonction de mon Shell actuel ?
(Modifier les fichiers d'initialisation ou redémarrer le Shell ne compte pas).

119voto

Chris Johnsen Points 36743

El non activé La commande intégrée prend une option, -f pour supprimer des fonctions :

unset -f foo

Formez le non activé l'entrée dans la bash page de manuel :

Si -f est spécifié, chaque nom fait référence à une fonction Shell, et la définition de la fonction est supprimée.

Note : -f n'est vraiment nécessaire que si une variable portant le même nom existe. Si vous n'avez pas également une variable nommée foo entonces unset foo supprimera la fonction.

7voto

XavierStuvw Points 405

Voir help unset :

unset: unset [-f] [-v] [-n] [name ...]

Unset values and attributes of shell variables and functions.

For each NAME, remove the corresponding variable or function.

Options:
  -f    treat each NAME as a shell function
  -v    treat each NAME as a shell variable
  -n    treat each NAME as a name reference and unset the variable itself
    rather than the variable it references

Without options, unset first tries to unset a variable, and if that fails,
tries to unset a function.

Some variables cannot be unset; also see `readonly'.

Exit Status:
Returns success unless an invalid option is given or a NAME is read-only.

Il n'y a ni unset --help ni man unset malheureusement.

0voto

slowkoni Points 101

J'ai récemment voulu désinstaller complètement nvm et le réinstaller, et se débarrasser de tous ses environnements. Il s'avère que s'en débarrasser n'a pas l'air de faire beaucoup de bien. nvm est en partie implémenté comme une cargaison de fonctions Shell qui proviennent de votre Shell par l'intermédiaire de .bash_profile ou .bashrc ou à l'endroit où vous avez ajouté les commandes de sourcing qui vous ont été indiquées lors de la première installation.

D'abord déconcerté par which nvm ne retournant rien encore clairement le nvm et d'autres étaient encore à trouver, j'ai fini par découvrir via declare -F que c'est un tas de fonctions Shell. Je ne voulais pas simplement tuer la Shell et en démarrer une nouvelle (pour des raisons non pertinentes ici), donc j'ai effacé la fonction nvm fonctions de ce Shell avec ceci :

for F in `declare -F | grep -e nvm | cut -f 3 -d\ `; do unset -f $F; done

Quelques variations sur ce sujet pourraient être utiles à quelqu'un qui, pour une raison quelconque, veut faire quelque chose de similaire et ne peut pas redémarrer un nouveau Shell ou ne veut pas le faire.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X