Кажется, что весь этот код можно переиспользовать из shell.