Bash (или другая оболочка): обернуть все команды функцией / скриптом

Изменить: Этот вопрос изначально был специфичным для Bash. Я бы все-таки предпочел решение для bash, но если есть хороший способ сделать это в другой оболочке, это было бы полезно знать!

Хорошо, описание проблемы на высшем уровне. Я хотел бы иметь возможность добавить хук для bash, так что, когда пользователь входит, например,$cat foo | sort -n | lessэто перехватывается и переводится наwrapper 'cat foo | sort -n | less', Я видел способы запуска команд до и после каждой команды (с использованием прерываний DEBUG или PROMPT_COMMAND или аналогичных), но ничего о том, как перехватить каждую команду и разрешить ее обработку другим процессом. Есть ли способ сделать это?

Для объяснения того, почему я хотел бы сделать это, если у людей есть другие предложения способов приблизиться к этому:

Инструменты какскрипт позволяет вам регистрировать все, что вы делаете в терминале, в журнал (как, в некоторой степени, делает историю Bash). Однако они делают это не очень хорошо - скрипт смешивает ввод с выводом в одну большую строку и путается с приложениями, такими как vi, которые занимают экран, история дает вам только набранные необработанные команды, и ни одна из них не работает хорошо, если у вас есть команды, вводимые в несколько терминалов одновременно. То, что я хотел бы сделать, - это собрать гораздо более богатую информацию - например, команду, время, которое она выполнила, время, которое она выполнила, состояние выхода, первые несколько строк stdin и stdout. Я также предпочел бы послать это слушающему демону, который мог бы успешно мультиплексировать несколько терминалов. Самый простой способ сделать это - передать команду другой программе, которая может выполнить оболочку для обработки команды в качестве подпроцесса, при этом получая указатели на stdin, stdout, состояние выхода и т. Д. Для этого можно написать оболочку, но вы ' я потерял бы большую часть функциональности уже в bash, что было бы неприятно.

Мотивация для этого возникает из-за попыток разобраться в аналитическом анализе данных, подобных процедурам после факта. Имея более богатую информацию, подобную этой, можно было бы генерировать достойные отчеты о том, что произошло, объединяя несколько вызовов одной команды в одну, где первые несколько дали ненулевой выход, спрашивая, откуда пришли файлы, выполняя поиск всего, что касалось файла, и т. д.

Ответы на вопрос(2)

Ваш ответ на вопрос