Bueno, yo nunca he hecho ninguno, pero se me ocurren ciertas cosas.
Si es un programa en terminal, no creo que se diferencia mucho de un bucle de este tipo:
...
interpretar = 1;
while(interpretar){
//leer entrada
//ejecutar entrada
}
...
//leer entrada - no creo que te cueste mucho, es leer carácteres por la entrada standar.
//ejecutar comando - aqui puedes hacer distintas cosas. Una de ellas seria parsear la entrada para ver si hay alguna orden que quieres implementar directamente en el interprete, entre ellas podrias hacer caso a la orden "salir" o "exit" para poner la variable interpretar a 0 y así terminar tu aplicación. En caso de no conocer la orden... realiza un exec(...) de la orden que has recogido. (el formato de la orden buscalo en algun manual, hay varias versiones de exec y los parametros cambian) esto mandará la orden al sistema a ver si existe algun ejecutable en alguna de las rutas del sistema con ese nombre. Si el exec te devuelve error puesdes imprimir el típico "comando no valido".
Espero que sirva de algo.
Saludos