Как я могу заставить 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