Как проверить, что ничего не было напечатано в предыдущем приглашении Zsh - PullRequest
0 голосов
/ 05 марта 2020

В приглашении zsh у меня есть собственный скрипт для отображения количества времени, в течение которого выполнялась последняя команда.

У меня это работает, но как проверить, что пользователь ничего не ввел и просто нажал "Enter" или "Ctrl + C", в предыдущем приглашении?

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

$history[$((HISTCMD-1))] не работает в этом случае. Если пользователь ничего не набрал и просто нажал клавишу ввода, он просто покажет последнюю команду, которая была выполнена, и не будет пустой строкой.

1 Ответ

0 голосов
/ 05 марта 2020

Если вы определите функцию с именем zshaddhistory, она будет вызываться при каждом нажатии Enter. $1 является вводимой командой, и это также может быть пустой командой. Вы можете установить глобальную переменную, чтобы указать, что была введена пустая строка, и использовать эту переменную позже.

Будьте осторожны с возвращаемым значением из этой функции: если она возвращает 0, команда сохраняется в история; в противном случае это не так. Подробнее об этом вы можете прочитать на справочной странице zshparam , где описано _HISTORY_IGNORE_, потому что основное использование этой функции - контролировать, следует ли добавлять команду в историю. Следовательно, альтернативой может быть добавление пустых строк в историю и использование вашего исходного подхода с $history для доступа к ней. Это имеет тот недостаток, что просмотр пустых записей истории не очень удобен для пользователя.

...