Parsing ligne commande - shell UNIX en C

Utilisateur anonyme -  
Sugel Messages postés 4076 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous !

Je suis en train de créer un interpréteur de commande UNIX en C dans le cadre d'un projet.

Je dois donc gérer les séparateurs et opérateurs tels que | < > << >> ; && etc

Je récupère déjà la ligne utilisateur, je sais comment faire les pipes, les exécutions de commande et tout le reste.

Le problème étant au niveau du parsing de la ligne récupérée.

Par exemple j'ai cette ligne

ls -l | grep Bureau > hello.txt ; ls | wc



Je pensais la parser de manière classique en prenant :
  • Le nom de la commande
  • Les arguments
  • L'opérateur


Et envoyer le tout à la fonction appropriée à l'opérateur (une fonction par opérateur)

Le problème vient sur la partie

grep Bureau > hello.txt ;


Si je suis ma logique, j'aurais un groupe qui se finira par la redirection > et un autre groupe qui ne contient que test.txt et ; (un groupe est une structure qui contient le nom de la fonction, les arguments et l'opérateur)

Ma question est la suivante :comment gérer les redirections au niveau du parsing ? Sachant que la redirection peut elle même être redirigée ou passée dans un pipe, etc.

Si vous avez besoin de plus de renseignements, n'hésitez pas à demander. Merci !
A voir également:

1 réponse

Sugel Messages postés 4076 Date d'inscription   Statut Membre Dernière intervention   727
 
Je suis vraiment très loin d'être un expert en parsing, mais j'ai quand même mon idée là dessus:
Face au même problème, je considérerai probablement que chaque opérateur a un argument qui est lui même traité comme un nouveau groupe.
A chaque nouvel opérateur, on crée un nouveau membre dans une liste chainée comportant les informations adaptées, et quand on arrive à un break (;), and (&&) ou à la fin de la commande, on ferme la liste et on la traite.

Qu'en pense-tu ?

Si tu es vraiment à cours d'idée, lis les sources de bash ou d'un autre shell populaire.

------------------------------------------------------------------------------------
"La peur mène à la colère. La colère mène à la haine. Et la haine ... mène à la souffrance." - Yoda
0