Моя программа gush (графическая оболочка пользователя) делает часть этого.
Он использует разные цвета для команд и программы stdin / stdout / stderr.
Обратите внимание, что традиционное разделение оболочки и терминала делает это
невозможно, потому что интерфейс между ними моделирует старый серийный
клеммное соединение и, следовательно, имеет только один вход и один
выходной канал. Я обхожу эту проблему, комбинируя оболочку и
терминал в одну программу.
Было бы неплохо также указать, когда программа ожидает ввода,
но я не думаю, что есть какой-либо способ обнаружить это, если вы не проследили
системные вызовы дочерней программы, чтобы определить, когда она пытается прочитать стандартный ввод.
Для интерактивных программ вы можете догадаться, что если последний вывод не
конец с новой строки, это, вероятно, запрашивает ввод, но это не будет
работа для неинтерактивных программ, например. СЕПГ.