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

Я решил проблему, изменив конфигурацию / etc / fstab. У меня на сервере несколько смонтированных разделов. Один был для / usr, другой - для / var / www, где у меня есть свои веб-проекты. Мне пришлось дать flash data = exec, а затем перезагрузить систему, переустановить node_modules в каталоге проекта.

UUID="b0d7a164-2536-4c2a-98f7-cdc6c3107c45" /var/www ext4 rw,relatime,data=ordered,exec 0 2
2
12.01.2017, 01:38
2 ответа

Следует использовать параметр HIST_IGNORE_SPACE .

setopt HIST_IGNORE_SPACE

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

2
27.01.2020, 21:59

По умолчанию zsh всегда сохраняет последнюю команду в истории сеанса, даже если установлено HISTSIZE = 0 . Вы можете написать свой собственный виджет для обойти механизм истории.

sneaky-run () {   
    echo
    eval $BUFFER
    BUFFER=''
    zle reset-prompt
}

zle -N sneaky-run
bindkey '^X^M' sneaky-run

Этот виджет скрытый запуск выполнит набранную в данный момент команду, затем очистит буфер команд и сбросит подсказку. Команды, которые выполняются в виджете: не добавляется в историю.

echo в начале необходимо, чтобы вывод начинался с новой строки.Если у вас есть многострочное приглашение, вам может потребоваться добавить дополнительные echo s для каждой дополнительной строки непосредственно перед zle reset-prompt , в противном случае приглашение может перезаписать несколько строк команды выход.

В этом примере скрытый запуск привязан к комбинации клавиш Ctrl + X , Введите .


Если вы не хотите использовать для этого дополнительную комбинацию клавиш, вы также можете обернуть виджет 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 , он также будет недоступен при нажатии Вверх .

Примечание: это переопределит одну из самых фундаментальных привязок клавиш zsh . Поэтому, пожалуйста, тщательно протестируйте, прежде чем помещать это в свой ~ / .zshrc .

3
27.01.2020, 21:59

Теги

Похожие вопросы