bash. как предотвратить запись идентичных команд в историю
Модераторы: /dev/random, Модераторы разделов
-
- Сообщения: 202
- ОС: Debian, openSUSE, Mac OS X
bash. как предотвратить запись идентичных команд в историю
По работе часто приходится запускать проект на компиляцию, а затем несколько раз на выполнение (меняя файл конфигурации).
Все это счастье происходит из командной строки, ибо удобно.
Написан makefile благодаря которому все и собирается.
В результате работы в итории bash пишется
make km
make km
km
km
km
...
и так бывает до сотни повторений, в зависимости от удачи в компиляции или в запуске программы.
В итоге файл истории замусорен однотипными командами, и естественно стрелкой "вверх" очень долго до предыдущей отличной команды надо крутить.
Как можно решить такую проблему: чтобы повторный запуск не писался идентичной строкой в историю?
Все это счастье происходит из командной строки, ибо удобно.
Написан makefile благодаря которому все и собирается.
В результате работы в итории bash пишется
make km
make km
km
km
km
...
и так бывает до сотни повторений, в зависимости от удачи в компиляции или в запуске программы.
В итоге файл истории замусорен однотипными командами, и естественно стрелкой "вверх" очень долго до предыдущей отличной команды надо крутить.
Как можно решить такую проблему: чтобы повторный запуск не писался идентичной строкой в историю?
Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X
-
- Сообщения: 73
- ОС: Gentoo
Re: bash. как предотвратить запись идентичных команд в историю
Код: Выделить всё
! 509 $ grep dups ~/.bashrc
HISTCONTROL=ignoredups
HISTCONTROL=erasedups
-
- Сообщения: 577
- ОС: OpenSUSE
Re: bash. как предотвратить запись идентичных команд в историю
либо Ctrl+R (поиск в истории "на лету")
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: bash. как предотвратить запись идентичных команд в историю
Dreamer77
$ man -P 'less -rp HISTCONTROL' bash
$ man -P 'less -rp HISTCONTROL' bash
последняя строчка и актуальна. если нужно присвоить несколько значений, разделяйте их двоеточием. в man всё расписано.valet2valet писал(а): ↑31.01.2011 11:19Код: Выделить всё
! 509 $ grep dups ~/.bashrc HISTCONTROL=ignoredups HISTCONTROL=erasedups
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: bash. как предотвратить запись идентичных команд в историю
valet2valet, sash-kan, спасибо вам! А то я периодически скрипт запускал, чтобы удалить из истории дубликаты и отсортировать содержимое. Теперь его можно будет запускать пореже...
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Модератор
- Сообщения: 4823
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: bash. как предотвратить запись идентичных команд в историю
а для чего это нужно?
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
- Сообщения: 202
- ОС: Debian, openSUSE, Mac OS X
Re: bash. как предотвратить запись идентичных команд в историю
В этом случае, как я понимаю, при введение команды уже бывшей в истории ранее -- старая запись удаляется, новая добавляется.valet2valet писал(а): ↑31.01.2011 11:19Код
! 509 $ grep dups ~/.bashrc
HISTCONTROL=ignoredups
HISTCONTROL=erasedups
Т.е. в любой момент времени в истории хранится набор уникальных команд.
Это конечно выглядит хорошо, но в результате теряется последовательность команд вводимых ранее.
Т.е. с одной стороны хочется сохранить историю в неизменном состоянии, а с другой убрать повторяющиеся блоки.
Идеальный случай:
1. при введении подряд идентичной команды, она не пишется в историю, т.е. после
km
km
km
в недавней истории остается только один раз km (не удаляя эту же команду использованную на 200 строчек истории раньше)
2. При введении идентичной последовательности команды, они бы не дублировалась, т.е. после
make km
km
make clean
make km
km
make clean
в недавней истории осталось только один блок
make km
km
make clean
(не удаляя этот блок команд использованный на 200 строчек истории раньше)
Такое возможно сделать?
Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: bash. как предотвратить запись идентичных команд в историю
Память дырявая. А так - посмотрел по истории - и нашел удобную утилитку, про которую уже и забыл, как называется...
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Модератор
- Сообщения: 4823
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: bash. как предотвратить запись идентичных команд в историю
Напишите в .bashrc просто
Код: Выделить всё
HISTCONTROL=ignoredups
Нет, ну это понятно, я тоже для этого хистори использую (:
Зачем удалять и сортировать?
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
- Сообщения: 202
- ОС: Debian, openSUSE, Mac OS X
Re: bash. как предотвратить запись идентичных команд в историю
В этом случае не выполняется пункт 2.
Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: bash. как предотвратить запись идентичных команд в историю
Потому что, во-первых, мне не нужно 100500 команд gcc с разными параметрами - я удаляю все параметры командной строки, оставляя лишь название команды. А во-вторых, в отсортированной истории искать попроще

RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Модератор
- Сообщения: 4823
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: bash. как предотвратить запись идентичных команд в историю
Да, действительно. Я как то не обратил внимания.
А, а у меня просто history пишется с таймстампом, так проще найти что и когда было сделано.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
- Сообщения: 202
- ОС: Debian, openSUSE, Mac OS X
Re: bash. как предотвратить запись идентичных команд в историю
Не совсем понял что это такое.
Но натолкнуло меня на мысль -- можно ли организовать history так, чтобы были только уникальные команды в течение суток, или в течение другого временного интервала?
Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: bash. как предотвратить запись идентичных команд в историю
Только дополнительной обработкой файла истории или правкой исходников bash.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Модератор
- Сообщения: 4823
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: bash. как предотвратить запись идентичных команд в историю
вывод history у меня вот такой:
Код: Выделить всё
9851 2011-01-30 02:21:09 find . -name "*txt" -exec grep -li cron {} \;
9852 2011-01-30 02:23:39 cat ReadMe.txt | enconv | less
9853 2011-01-30 02:43:22 php -v
^^^^^^^^^^^^^^^^^^^ - таймстамп
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
- Сообщения: 202
- ОС: Debian, openSUSE, Mac OS X
Re: bash. как предотвратить запись идентичных команд в историю
SLEDopit, очень удобно, как такое можно реализовать? И где, помимо мана, можно почитать про полезные возможности?
Я так и думал. Чудес не бывает.
Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X
-
- Модератор
- Сообщения: 4823
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: bash. как предотвратить запись идентичных команд в историю
Код: Выделить всё
export HISTTIMEFORMAT='%F %T '
Ну раз так неохота читать ман, то можно погуглить статейки по настройке bash'a. Там, как правило, подобные фишки написаны.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: bash. как предотвратить запись идентичных команд в историю
…почитать info. (: Там даже подробнее.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: bash. как предотвратить запись идентичных команд в историю
вот этот:
?
легко.
$ make km && km && make clean
p.s. а и.и. пока не изобретён. и в программах из gnu вы даже его признаков не отыщете.
$ man -P 'less -rp HISTTIMEFORMAT' bash
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Сообщения: 202
- ОС: Debian, openSUSE, Mac OS X
Re: bash. как предотвратить запись идентичных команд в историю
бесспорно это будет работать. Только в этом случае теряется смысл компиляции.
Хотя для режима отладки подойдет.
спасибо, понял.
Понял свою безграмотность консольную. Умом понимаю эту строчку, а вот как именно она работает -- не знаю.
так и сделаю. Я совсем не против читать маны=)
Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X
-
- Модератор
- Сообщения: 4823
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: bash. как предотвратить запись идентичных команд в историю
Код: Выделить всё
man -P 'less -rp HISTTIMEFORMAT' bash
-P (относится к man) указывает pager (программу, которая будет выводить на экран справку
less - является пейджером
-p HISTTIMEFORMAT (относится к less) указывает, что в выводимом тексте нужно найти слово HISTTIMEFORMAT и начать показ именно с него.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
- Сообщения: 203
- ОС: Убунту
Re: bash. как предотвратить запись идентичных команд в историю
Можно попробовать такой скрипт который из файла .bash_history удаляет повторяющиеся строки.
Код: Выделить всё
#!/usr/bin/ruby -Ku
def line_exist?(line)
File.open(self).each { |line2| return true if line2.chomp == line }
end
# Creating new file
File.new "./.bash_history.tmp"
# Opening it
File.open("./.bash_history.tmp","w") do |line|
# Opening file with history and removing line if line exist
File.open("./.bash_history").each do |line2|
file.puts line2 if not "./.bash_history.tmp".line_exist?
end
end
# Deleting file with history
File.delete "./.bash_history"
# Renaming
File.rename "./.bash_history.tmp", "./.bash_history.tmp"
-
- Модератор
- Сообщения: 4823
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: bash. как предотвратить запись идентичных команд в историю
о боже.
Код: Выделить всё
history | awk '!_[$2$3]++' > .bash_history.tmp; mv .bash_history.tmp .bash_history
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: bash. как предотвратить запись идентичных команд в историю
Кстати, а зачем сохранять «последоальность команд, введённых ранее»? Может быть, подойдёт совмещение опции erasedups с помещением файла истории под управление версиями?
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Сообщения: 202
- ОС: Debian, openSUSE, Mac OS X
Re: bash. как предотвратить запись идентичных команд в историю
Иногда выполняется сложный набор команд, который хочется сохранить в том же порядке, чтобы можно было посмотреть после и снова в той же последовательности выполнить. Хотя такое требовалось довольно редко. Т.ч. наиболее вероятно на рабочем компе включу erasedups.
Что есть управление версиями и как совмещать с историей?
Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: bash. как предотвратить запись идентичных команд в историю
Да, думаю, Вам это вполне подойдёт.
Системы управления версиями. Например, git. У меня весь домашний каталог под его управлением находится. В итоге (в частности) всегда есть возможность вернуться (временно) к любой отмеченной ранее версии любого файла; в том числе и .bash_history. Я в ближайшее время планирую написать именно о применении СУВ «в мирных целях». Если интересует, дам в этой теме ссылку, когда будет готово.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Сообщения: 202
- ОС: Debian, openSUSE, Mac OS X
Re: bash. как предотвратить запись идентичных команд в историю
Очень интересует.
По идее используя СУВ можно каждый день создавать новый history файл, при этом работая с историей предыдущих дней. После окончания дня дописывать уникальный набор команд в старый history файл. Если при этом еще включить таймстамп, то будет очень информатиыный файл истории, при этом не переполнынный лишними командами.
Хотя и без СУВ можно такое организовать.
Надо побольше узнать о СУВ, ибо можно использовать ее как замену бэкапу.
По идее используя СУВ можно каждый день создавать новый history файл, при этом работая с историей предыдущих дней. После окончания дня дописывать уникальный набор команд в старый history файл. Если при этом еще включить таймстамп, то будет очень информатиыный файл истории, при этом не переполнынный лишними командами.
Хотя и без СУВ можно такое организовать.
Надо побольше узнать о СУВ, ибо можно использовать ее как замену бэкапу.
Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: bash. как предотвратить запись идентичных команд в историю
Да, и как замену бэкапу в том числе. Хорошо, как только текст будет готов, выложу здесь ссылку.Dreamer77 писал(а): ↑31.01.2011 19:06Очень интересует.
По идее используя СУВ можно каждый день создавать новый history файл, при этом работая с историей предыдущих дней. После окончания дня дописывать уникальный набор команд в старый history файл. Если при этом еще включить таймстамп, то будет очень информатиыный файл истории, при этом не переполнынный лишними командами.
Хотя и без СУВ можно такое организовать.
Надо побольше узнать о СУВ, ибо можно использовать ее как замену бэкапу.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Модератор
- Сообщения: 4823
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: bash. как предотвратить запись идентичных команд в историю
Если мне память не изменяет, то одно из основных условий бэкапа - копия должна быть хотя бы на другой физической машине (в идеале на удаленной машине). Вы собираетесь версии постоянно по сети гонять?
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
- Сообщения: 202
- ОС: Debian, openSUSE, Mac OS X
Re: bash. как предотвратить запись идентичных команд в историю
Бэкап тоже "версии" по сети гоняет. Ведь сохраняется не полная копия, а только измененные файлы.
Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X