2013-04-06 2 views
3

Есть ли способ изменить каждую команду, введенную в командной строке bash с помощью скрипта/крючка?Как изменить каждую команду bash перед выполнением?

В моем идеальном мире сценарий будет срабатывать после ввода пользователем команды, но ПЕРЕД нажатием клавиши Enter. Он получит командную строку в качестве параметра, модифицирует ее и передаст ее в bash для выполнения (так что все будет происходить прозрачно).

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

Я знаю некоторые хаки, чтобы что-то сделать с последней командой после ее выполнения (trap 'function' DEBUG и т. П.), Так как есть много вопросов относительно этого сценария, но здесь это не поможет.

Спасибо и с уважением!

+3

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

+0

@Barmar Это именно то, что я имел в виду. Конечно, невозможно сказать, когда пользователь собирается нажать клавишу Enter. –

+0

@ AdrianFrühwirth Я абсолютно понимаю вашу точку зрения - я бы не хотел, чтобы кто-то сидел между тем, что я вхожу, и тем, что выполняется. Но поскольку я делаю это в своей оболочке, я могу жить с ней. –

ответ

2

Что вы хотите - это своего рода завершение команды - мне кажется.

Существует многое за редактированием строки bash: связуемые команды readline или завершение команды и подстановка команд.

Во-первых, вы можете написать писать и компилировать свои собственные Баш встроенные команды: http://www.drdobbs.com/shell-corner-bash-dynamically-loadable-b/199102950

Далее, вы можете изменить Баш через то, что люди называют линия редактирования или Readline: Начало здесь может быть: http://www.math.utah.edu/docs/info/features_7.html

http://www.gnu.org/software/bash/manual/html_node/Command-Line-Editing.html

+0

Звучит очень интересно ... –