LINUX.ORG.RU

bash - выполнить команду, не добавляя ее в историю

 ,


1

1

Про HISTCONTROL знаю, однако самый частый паттерн — поднять какой-нибудь git fetch из истории и выполнить его. Сейчас приходится жать ^r, переходить в начало строки. добавлять пробел и только после этого жать на Enter. Хотелось бы нажимать, скажем, Ctrl-Enter, чтобы выполнить команду без оседания ее в истории.

Итого вопрос можно разбить на две части:

  1. как выглядит ctrl-enter для bind-а? Пробовал «подсмотреть» через ^v, так Ctrl-Enter работает похоже на ^j — т. е. вставляет перевод строки.
  2. а что, собственно, биндить-то? «перейти в начало строки», «ввести пробел», «нажать enter»?

А зачем в начало переходить и пробел вставлять? Ведь достаточно в HISTCONTROL запретить дубликаты, нет?

bormant ★★★★★ ()
Ответ на: комментарий от bormant

Ведь достаточно в HISTCONTROL запретить дубликаты, нет?

Нет, потому что там речь идет о дубликатах последней команды, т. е. если десять раз подряд ввести git fetch, то в истории осядет только один, но если 10 рад по очереди ввести git fetch/git commit, то история пополнится 20-ю «новыми» командами.

kawaii_neko ★★★★ ()
Ответ на: комментарий от kawaii_neko

Кстати да (не только с гитом). Напрягает слегка. Раньше такого не было.

deep-purple ★★★★★ ()
Ответ на: комментарий от kawaii_neko

Нет, потому что там речь идет о дубликатах последней команды

Это ignoredups. erasedups работает иначе. При этом если изначально это опция включена не была, то старые дубликаты остаются, вроде. И их нужно вычистить вручную.

xaizek ★★★★★ ()

Ну, можно написать пробел перед командой.

anonymous ()
Ответ на: комментарий от xaizek

Проверил, действительно. Но мне нужно в том числе и не сохранять некоторые одноразовые команды в истории, которые получаются после поиска и небольшой правки других команд из истории. Жать каждый раз home, space, enter надоело.

kawaii_neko ★★★★ ()
Ответ на: комментарий от xaizek

Это ignoredups. erasedups работает иначе

Кстати, у меня readline-6.3, пара значений в HISTCONTROL не работает, например:
export HISTCONTROL=«erasedups ignorespace»

Работают только по одиночке erasedups, ignorespace, ignoredups, ignoreboth.

Проверьте, у вас не так?


PS. Но судя по наличию ignoreboth и не должны...

bormant ★★★★★ ()
Последнее исправление: bormant (всего исправлений: 1)
Ответ на: комментарий от xaizek

A colon-separated list of values [...]

Отлично! Слона-то я и не приметил ;-)

bormant ★★★★★ ()
Ответ на: комментарий от anonymous

Это будет работать только если история записывается после каждой команды, а это не так, если не прописать history -a в $PROMPT_COMMAND.

anonymous ()
Ответ на: комментарий от kawaii_neko

Тогда вот:

# execute command after prepending space to it (Ctrl-Space)
bind '"\C-@": "\C-A \C-M"'

Ctrl-Space так как Enter это уже Ctrl-M и два раза модификатор не добавишь.

xaizek ★★★★★ ()

Про HISTCONTROL знаю

А про https://github.com/dvorka/hstr знаешь? Пользуй его для шаринья по истории и будет уже неважно, пишется что то в неё или не пишется.

zvezdochiot

anonymous ()
Ответ на: комментарий от kawaii_neko

но если 10 рад по очереди ввести git fetch/git commit

Радикально-альтернативное: на однотипное можно скрипт написать. Обозвать его как g, оно будет спрашивать, вам fetch или commit, а вводить можно сделать по одной букве даже без <Enter> :)

vodz ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.