Aller au contenu

Les builtins#


Introduction aux builtins et leur rôle#

  • Les builtins sont des commandes intégrées directement dans le shell Korn (KSH).
  • Elles ont généralement une exécution plus rapide que les commandes externes car elles ne nécessitent pas de fork() ou exec().
  • Les builtins permettent de manipuler directement les structures internes du shell, comme les variables d'environnement ou les paramètres de shell.

ℹ️ Bash ne supporte pas l'ajout de builtins personnalisés comme KSH. Il est possible de créer des fonctions en Bash qui agissent de manière similaire aux builtins, mais elles n'auront pas le même niveau de performance ou d'accès aux structures internes du shell que les builtins en KSH.


Écrire un builtin pour Ksh#

  • Choisir un nom pour le builtin et définir sa fonctionnalité.
  • Créer une fonction C qui implémente la logique du builtin.
  • Utiliser la macro DEF_BUILTIN pour déclarer le builtin.
  • Ajouter la déclaration du builtin à l'array builtins.
  • Compiler et tester le shell avec le nouveau builtin.

Intégrer un builtin#

  • Intégrer un builtin dans KSH nécessite de recompiler le shell.
  • Une fois compilé, le shell inclut le nouveau builtin et peut être utilisé comme n'importe quelle autre commande.
  • Pour utiliser le builtin dans un script, il suffit d'appeler son nom comme n'importe quelle autre commande.

Les bibliothèques de builtin#

  • Les bibliothèques de builtins permettent d'ajouter des collections de builtins au shell - sans recompiler celui-ci.
  • Pour créer une bibliothèque de builtins, il faut regrouper plusieurs déclarations DEF_BUILTIN dans un seul fichier source.
  • Ensuite, compilez ce fichier pour obtenir une bibliothèque partagée (.so) qui peut être chargée dans le shell avec la commande builtin -f.

Exemples pratiques et cas d'utilisation#

  • Un exemple de builtin couramment utilisé dans KSH est cd, qui change le répertoire de travail du shell.
  • Une utilisation courante des builtins personnalisés pourrait être la création d'une commande pour manipuler une base de données spécifique à une application.
  • Par exemple, un builtin dbinsert pourrait insérer une ligne dans la base de données, tandis qu'un builtin dbquery pourrait récupérer des données.