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

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

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 

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

  • Есть ли способ добавить каталог в мой PATH в zsh, только если он еще не присутствует?
  • Как удалить каждый файл с x в заголовке?
  • Автоматизация cd в каталог архива в ~ / .avfs
  • Как сортировать имена файлов в числовом порядке и измененный порядок времени?
  • Завершение слов на экране, как в VIM (Bash или Tmux)
  • Абсолютный путь к текущему zsh?
  • Внедрить десериализацию значения ключа или что-то подобное
  • Зачем кому-то помещать что-либо в / etc / zshenv или ~ / .zshenv?
  • Режим vi не отображается корректно на новом терминале
  • В tmux как установить переменную, специфичную для панели, которая будет отображаться в строке состояния панели только для этой панели
  • Искать предыдущую команду с тем же префиксом, когда я нажимаю Up в командной строке
  • Linux и Unix - лучшая ОС в мире.