Parsing ligne commande - shell UNIX en C
Utilisateur anonyme
-
Sugel Messages postés 4076 Date d'inscription Statut Membre Dernière intervention -
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
Je pensais la parser de manière classique en prenant :
Et envoyer le tout à la fonction appropriée à l'opérateur (une fonction par opérateur)
Le problème vient sur la partie
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 !
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:
- Parsing ligne commande - shell UNIX en C
- Invite de commande - Guide
- Partager photos en ligne - Guide
- Classic shell - Télécharger - Personnalisation
- Mètre en ligne - Guide
- Commande terminal mac - Guide
1 réponse
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
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