Как я могу заставить Bash (или Zsh) запускать определенную команду перед каждой введенной командой?

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

Есть ли вариант для этого в Bash? Если нет, есть ли опция в Zsh?

(Существует решение на основе readline, которое в некоторой степени соответствует этой проблеме по другому вопросу, но кажется немного хакерским. Это будет последним средством.)

2 ответа

Для этого вы можете использовать "precmd" в zsh.

Возможно, вы захотите настроить резервное копирование в Vim, потому что делать подобные вещи в precmd мне не подходит.

Я сделал аналогичные вещи, используя псевдо-суб-оболочку с использованием встроенного чтения следующим образом:

#!/bin/sh
#public domain fake shell template
while read -p "$PS1" CMD; do
   case "$CMD" in
      *bad_case*|*another_bad_case*)echo bad command: user info logged etc..;;
      *)<your_command_here>
         eval "$CMD";;
   esac
done
Другие вопросы по тегам