I had forgotten to handle the possibility of no user input i.e. the user just pressing enter at the vish prompt. I took care of that today. I also found an issue that was being caused by not setting a pointer to NULL after freeing it. (The pointer variable was being reused in a loop.)
Finally, I had to make a minor change in order to account for some of the quirks in the behaviour of strtok().
I think vish is a lot more robust now. But it still does not handle cd, pwd, input and output redirection etc. Will get around to it later as I need to spend time studying the Minix kernel source.