Подтвердить что ты не робот

Как выполнить некоторую команду до или после каждой команды Bash, введенной с консоли?

Я хочу запустить команду, например

echo "foobar";

После каждой команды, введенной пользователем.

Два сценария:

  • Когда пользователь вводит команду, моя глобальная команда должна быть выполнена, а затем его команда должна быть выполнена
  • Когда пользователь вводит команду, его команда должна быть выполнена, а затем моя глобальная команда должна быть выполнена

Как выполнить описанные выше два сценария?

NB: я не хочу использовать приглашение для этой цели (оставьте переменную PS1 как есть).

4b9b3361

Ответ 1

Как показывает l0b0, вы можете использовать PROMPT_COMMAND для выполнения второго запроса, и вам не придется прикоснуться к PS1.

Чтобы выполнить свой первый запрос, вы можете trap псевдо-сигнал DEBUG:

trap 'echo "foobar"' DEBUG

Ответ 2

Для второй части вы можете использовать declare -r PROMPT_COMMAND="echo 'foobar'": она выполняется непосредственно перед отображением приглашения. Остерегайтесь, чтобы он не запускался для каждой команды, например, в канале или группе команд.

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