Création d’un Shell Unix

[ Création d’un Shell Unix ]

 

Introduction au développement d’un shell Unix en langage C  supportant les variables d’environnement

  1. Qu’est-ce qu’un Shell ?

 

 

Un shell, c'est un interpréteur de commandes, et en même temps un langage de programmation.

 

Lorsque vous tapez des commandes sur une console (ou un terminal), vous envoyez ces commandes au shell, qui va les interpréter pour renvoyer le résultat.

 

Bash, c'est l'un des nombreux shells existants dansle monde Unix.

 

 

  1. Qu’est-ce que l’ENV ?

 

 

Les variables d'environnement constituent un moyen d'influencer le comportement des logiciels sur votre système. Par exemple, la variable d'environnement « LANG » détermine la langue que les logiciels utilisent pour communiquer avec l'utilisateur.

 

Les variables sont constituées de noms auxquels on assigne des valeurs. Ainsi, le système d'un utilisateur français devrait avoir la valeur « fr_FR.UTF-8 » assignée à la variable « LANG ».

 

La signification d'une variable d'environnement et le type de valeur qui peut lui être assignée sont déterminés par l'application qui utilise celle-ci. Il existe un petit nombre de variables d'environnement bien connues, dont le sens et le type de valeur sont bien déterminés, et qui sont utilisées par de nombreuses applications.

 

 

  1. Fonction de récuperation des variables d’environnement

 

 

En C, la function main nous permet de récupérer l’environnement grâce a son troisième parametre :

 

 

Il nous suffit de faire une simple boucle pour pouvoir en parcourir toutes ses variables.

 

 

 

  1. Fonction d’affichage d’un prompt

 

Nous crééons une fonction recursive (qui s’appelle elle même), pour pouvoir lire à l’infinie les entrées de l’utilisateur.

 

 

Nous affichons les caractères “>> “ afin de précéder à l’entrée de l’utilisateur et lui signifier que nous attendons un input.

 

 

5 . Création d’une function qui  renvoie la variable d’environnement  PATH

 

 

Avant d’executer la moindre commande, nous devons connaitre le PATH de l’environnement.

 

Le PATH est une variable system qui contient une liste de répertoires séparés par deux-points “:” .

 

Ce sont les répertoires dans lesquels le shell cherche la commande que l’on écrit au clavier.

 

La recherche se fait dans l'ordre des répertoires contenus dans la variable PATH.

 

 

 

Exemple :

 

 

 

 

Nous pouvons voir dans l’image ci-dessus que le PATH contient bien les repertoires system où sont localisés nos binaires.

 

 

 

6 . La function permettant de faire des forks

 

 

Pour créer un nouveau processus à partir d'un programme, on utilise la function fork.

 

Le  processus d'origine est nommé processus père et le nouveau processus créé processus fils, qui possède un nouveau PID.

 

Les deux ont le même code source, mais la valeur retournée par fork nous permet de savoir si l'on est dans le processus père ou dans le processus fils.

 

 

Pour pouvoir lancer un programme nous utilisons une des fonctions de la famille EXEC : execve.

 

La fonction execve() est une fonction assez utile qui va nous permettre d’exécuter un autre programme avec ses arguments dans un environnement que l'on pourra spécifier.

 

 

 

  1. Conclusion

 

 

 

Vous avez à présent les grandes lignes pour programmer votre propre Shell Unix en langage C.

 

 

Idées de fonctionnalités à rajouter :

 

  • Gestion des pipes
  • Gestion de redirection
  • Programmation des buildin
  • Pipes infinis
  • Affichage de couleurs

 

 

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *