Дубли в истории команд bash

Автор yoric, 16 ноября 2015, 16:33:59

« назад - далее »

0 Пользователи и 3 гостей просматривают эту тему.

yoric

Здравия!
В .bash_history полно дублей, несмотря на "export HISTCONTROL=ignoreboth:erasedups" в .bashrc. После прогона "sort -u .bash_history > new-hist" размер снизился в 4 с лишним раза. Это ж сколько там дублей... А почему не работает-то?

oermolaev

Цитата: yoric от 16 ноября 2015, 16:33:59"export HISTCONTROL=ignoreboth:erasedups" в .bashrc

попробуйте просто
HISTCONTROL=ignoreboth

без export, как в шаблоне /etc/skel/.bashrc

yoric

Спасибо за наводку, наверное да, эти не стоит экспортировать...

yoric

Всё равно пишет дубли... Наверное, не могут сосуществовать "ignoredups" & "erasedups".
Попробую просто
HISTCONTROL=erasedups
который, насколько я понял докусентацию, с лихвой перекрывает "ignoredups".

oermolaev

yoric, зачем "ignoredups", зачем "erasedups"? Чем не нравится "ignoreboth"?
"ignoreboth" вполне работает.
ЦитироватьA value of ignoreboth is shorthand for ignorespace and ignoredups.

yoric

A value of ignoredups causes lines  matching  the  [color=red]previous[/color]  history entry to not be saved.
Я так понимаю, что только два дубля подряд не пишутся.

A value of erasedups causes all previous lines matching the current line to be removed from the history list before that line is saved.  Any value not in the above list is  ignored.
А это более многообещающе звучит ;D

oermolaev

Цитата: yoric от 18 ноября 2015, 16:13:43Я так понимаю, что только два дубля подряд не пишутся.

практика показывает что это касается всех дублей. "erasedups" не пробовал

yoric

#7
У меня пока работает только отсутствие "ignorespace", сразу mc стал в историю испражняться. Попробую сейчас без erasedups.
Правда, ещё добавлено:
HISTIGNORE="&:ls:[bf]g:exit:ps:history:df:di:free:uptime:frm:from:lsmod:kill"
но это вроде не должно влиять.

Cообщение объединено 18 ноября 2015, 17:03:12

Не работает, хоть тресни... в .bash_history порядка 500 строк, запускаю команду, в точности как одна из уже имеющихся, дописывает её в конец, и все дела... Дальше не проверял, но этого уже достаточно, чтобы констатировать факт ненадлежащего исполнения своих обязанностей... Достаточно ведь перезапустить xterm в граф. сессии? А как оно будет выглядеть в случае нескольких шеллов одновременно, страшно и подумать... В общем, дело тёмное, сдаюсь :(

ogost

емнип по дефолту при наличии нескольких шеллов в хистори пишется только первый. есть возможность писать и все сессии, но получается каша. есть (был ранее, по крайней мере) костыль, который создает для каждой сессии отдельный .bash_history.
по идее должно быть достаточно перезапустить эмулятор, но если не получаться, то попробуйте перелогиниться. у меня HISTCONTROL=ignoreboth работает нормально, дублей не наблюдается.
ну и на всякий случай, не оскорбления для, а уточнения ради, вы же в хомяке правите .bashrc?

yoric

Да, с точкой, свой личный, не общесистемный. Попробую перелогин.

yoric

Разобрался вроде слегка, перелогин ни при чём,  Х-ах достаточно перезапустить терминал. Но дело вот в чём. Если не экспортировать эти HIST*, то всё работает, но если отсюда же запустить мс - естественно, его шелл про это ничего не знает и пишет всё подряд. Если без экспорта - тогда первый пишет. Можно как-нибудь одновременно и экспортировать и не экспортировать? Почитал man bash, вроде кроме "declare & local" не нашёл подобного, но это не то.

oermolaev


yoric

Ну разве что в глобальном попробовать...