57 lines
1.7 KiB
Markdown
57 lines
1.7 KiB
Markdown
# Supprimer une fonction shell avec `unset`
|
|
|
|
*Comment supprimer une fonction en Bash ? Comment effacer, retirer ou désenregistrer une fonction shell ? Comment annuler la définition d'une fonction Bash ? Quelle est la différence entre supprimer une variable et supprimer une fonction avec `unset` ? Pourquoi `man unset` ne fonctionne pas ?*
|
|
|
|
En Bash, la commande intégrée `unset` sert à supprimer des variables, mais aussi des **fonctions**. Pour cibler explicitement une fonction, on utilise l'option `-f` (pour *function*) :
|
|
|
|
```bash
|
|
unset -f foo
|
|
```
|
|
|
|
## Quand `-f` est-il vraiment nécessaire ?
|
|
|
|
D'après la documentation de Bash, sans option, `unset` essaie d'abord de supprimer une variable, puis se rabat sur une fonction si aucune variable de ce nom n'existe.
|
|
|
|
Autrement dit, **`-f` n'est indispensable que si une variable et une fonction portent le même nom**. Dans le cas contraire, un simple `unset foo` suffit.
|
|
|
|
## Exemple complet
|
|
|
|
```bash
|
|
# Définition d'une fonction
|
|
foo() { echo "bonjour"; }
|
|
|
|
foo
|
|
# → bonjour
|
|
|
|
# Suppression
|
|
unset -f foo
|
|
|
|
foo
|
|
# → bash: foo : commande introuvable
|
|
```
|
|
|
|
Et voici le cas où `-f` fait toute la différence :
|
|
|
|
```bash
|
|
foo="une variable"
|
|
foo() { echo "une fonction"; }
|
|
|
|
unset foo # supprime la variable
|
|
foo # → une fonction (la fonction existe toujours)
|
|
|
|
unset -f foo # supprime la fonction
|
|
```
|
|
|
|
## Consulter la documentation
|
|
|
|
`unset` étant une commande interne à Bash (*builtin*), elle n'a ni page `man unset` ni option `--help`. Sa documentation se consulte avec :
|
|
|
|
```bash
|
|
help unset
|
|
```
|
|
|
|
## À retenir
|
|
|
|
- `unset -f nom` supprime explicitement une fonction.
|
|
- `unset nom` suffit si aucune variable ne porte ce nom.
|
|
- Pour la doc d'un builtin Bash : `help <commande>`, pas `man`. |