Как выполнить команду, не сохраняя ее в истории (даже для клавиши «вверх») в zsh

Люди упомянули, используя preexec hook в zsh, но как именно я должен использовать его? Я имею в виду, хорошо, я могу проверить для каждой команды, действительно ли это команда, которую я не хочу отображать в истории, но что делать после этого?

  • Всплывающее окно Python virtualenvwrapper и ZSH
  • Передача glob-выражений в функции / скрипты
  • Backspace в zsh застрял
  • Недопустимое присвоение zsh в функции канала
  • zsh compinit: небезопасные каталоги, запустить compaudit для списка
  • Как получить доступ к fpath пользователя, в отличие от fpath системы со сценарием?
  • zle - я не могу найти, почему Ctrl + R не работает для non-root
  • zsh сломал ключ и специальные символы
  • удалить хост из списка завершения для ssh в zsh
  • Могу ли я выборочно отключить завершение zsh?
  • Ограничение поддержки символов ZSH, поддерживающее повторение?
  • dnf установить завершение не работает с zsh, но работает с bash
  • 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 

    или установить его в свой профиль, а затем префикс команд, которые вы не хотите хранить с пробелом.

    Linux и Unix - лучшая ОС в мире.