Как выполнить команду, не сохраняя ее в истории (даже для клавиши «вверх») в zsh
Люди упомянули, используя preexec
hook в zsh, но как именно я должен использовать его? Я имею в виду, хорошо, я могу проверить для каждой команды, действительно ли это команда, которую я не хочу отображать в истории, но что делать после этого?
- zle читать первое слово в строке?
- POSIX-совместимый / кросс-shell-способ для получения версии запущенной оболочки?
- Как тихо получить пустую строку из шаблона шара без совпадений
- Используйте `/ etc / paths` или` / etc / paths.d` для добавления элементов в PATH в macOS Sierra?
- Отключить классификаторы glob в zsh
- Как я могу использовать вывод команды без использования мыши?
- Сократить путь в приглашении zsh
- Проблема с пониманием привязок ключей
- Можно ли в реальном времени заменить текст в оболочке?
- Как я могу получить справочное сообщение для zsh builtin's?
- Shell Script для перехода через рекурсивно и chmodding в соответствии с условиями типа файла
- Получить расширение псевдонима (как в bash, так и в zsh)
- zsh уведомление об электронной почте (в maildir)
2 Solutions collect form web for “Как выполнить команду, не сохраняя ее в истории (даже для клавиши «вверх») в zsh”
По умолчанию zsh
всегда сохраняет последнюю команду в истории сеанса, даже если HISTSIZE=0
. Вы можете написать свой собственный виджет, чтобы обойти механизм истории.
sneaky-run () { echo eval $BUFFER BUFFER='' zle reset-prompt } zle -N sneaky-run bindkey '^X^M' sneaky-run
Этот виджет sneaky-run
запустит введенную в настоящее время команду, затем пуст буфер команд и сбросит приглашение. Команды, которые запускаются внутри виджета, не добавляются в историю.
echo
в начале необходимо, чтобы выход начинался в новой строке. Если у вас многострочное приглашение, вам может потребоваться добавить дополнительные echo
сигналы для каждой дополнительной строки непосредственно перед zle reset-prompt
, в противном случае приглашение может перезаписать несколько строк вывода команды.
Для этого примера sneaky-run
привязан к комбинации клавиш Ctrl + X , Enter .
Если вы не хотите использовать дополнительную комбинацию клавиш для этого, вы также можете обернуть виджет accept-line
приемник, который обычно привязан к Enter
accept-line-with-sneaky () { if [[ "$BUFFER" == "${BUFFER#" } ]] ; then zle accept-line else echo eval $BUFFER BUFFER='' zle reset-prompt fi } zle -N accept-line-with-sneaky bindkey '^M' accept-line-with-sneaky
Это подражает поведению установки HIST_IGNORE_SPACE
: если команда начинается с пробела, она не будет добавлена в историю. Но кроме HIST_IGNORE_SPACE
он также не будет доступен при нажатии кнопки Up .
Примечание: это переопределит одно из самых основных привязок клавиш zsh
. Поэтому, пожалуйста, тщательно ~/.zshrc
перед тем, как поместить это в свой файл ~/.zshrc
.
Вы должны использовать опцию HIST_IGNORE_SPACE
.
setopt HIST_IGNORE_SPACE
или установить его в свой профиль, а затем префикс команд, которые вы не хотите хранить с пробелом.
- Различные методы получения SHA1 дают разные результаты
- Ctrl Right и Ctrl Left не перемещается из одного слова в другое в Fish Shell