2

На bash, есть ли простой способ запуска команды каждый раз, когда в вашей оболочке вводится другая команда?

Я знаю о ловушке DEBUG ', но, к сожалению, он не запускает указанный код для каждой команды. Например:

$ trap 'echo "COMMAND: $BASH_COMMAND"' DEBUG
$ ls
COMMAND: ls --color
[output of ls]

Но:

$ (for a in `seq 1 10`; do echo -n "$a "; done;)
1 2 3 4 5 6 7 8 9 10

Я хотел бы получить что-то, что выдаст мне «КОМАНДУ: (для ввода ...)», например, любую команду, вставленную в подсказку.

1 ответ1

4

Ты можешь использовать

PROMPT_COMMAND='printf "COMMAND:%s\n" "$(fc -ln|tail -1)"'

которая печатает предыдущую команду после ее вывода (до следующего приглашения)

$ PROMPT_COMMAND='printf "COMMAND:%s\n" "$(fc -ln|tail -1)"'
COMMAND:     PROMPT_COMMAND='printf "COMMAND:%s\n" "$(fc -ln|tail -1)"'
$ ls
32-but ubuntu-gnome/  IE9 - Win7/
[output of ls]
COMMAND:     ls
$ (for a in `seq 1 10`; do echo -n "$a "; done;)
1 2 3 4 5 6 7 8 9 10 COMMAND:    (for a in `seq 1 10`; do echo -n "$a "; done;)
$ 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .