вы хотите захватывать ввод в необработанном режиме. это может быть довольно сложно, но вот пример, который должен привести вас на правильный путь:
http://docs.linux.cz/programming/c/unix_examples/raw.html
Я предполагаю, что вы пишете свою оболочку в c. если вы используете язык более высокого уровня, возможно, есть простой способ получить необработанный ввод. в python, например, я бы использовал модуль ncurses.