bash. как предотвратить запись идентичных команд в историю

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
Dreamer77
Сообщения: 202
ОС: Debian, openSUSE, Mac OS X

bash. как предотвратить запись идентичных команд в историю

Сообщение Dreamer77 »

По работе часто приходится запускать проект на компиляцию, а затем несколько раз на выполнение (меняя файл конфигурации).
Все это счастье происходит из командной строки, ибо удобно.
Написан makefile благодаря которому все и собирается.

В результате работы в итории bash пишется
make km
make km
km
km
km
...

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

Как можно решить такую проблему: чтобы повторный запуск не писался идентичной строкой в историю?
Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X
Спасибо сказали:
valet2valet
Сообщения: 73
ОС: Gentoo

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение valet2valet »

Код: Выделить всё

! 509 $ grep dups ~/.bashrc
HISTCONTROL=ignoredups
HISTCONTROL=erasedups
Изображение
Спасибо сказали:
Аватара пользователя
radial
Сообщения: 577
ОС: OpenSUSE

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение radial »

либо Ctrl+R (поиск в истории "на лету")
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение sash-kan »

Dreamer77
$ man -P 'less -rp HISTCONTROL' bash

valet2valet писал(а):
31.01.2011 11:19

Код: Выделить всё

! 509 $ grep dups ~/.bashrc
HISTCONTROL=ignoredups
HISTCONTROL=erasedups
последняя строчка и актуальна. если нужно присвоить несколько значений, разделяйте их двоеточием. в man всё расписано.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение eddy »

valet2valet, sash-kan, спасибо вам! А то я периодически скрипт запускал, чтобы удалить из истории дубликаты и отсортировать содержимое. Теперь его можно будет запускать пореже...
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение SLEDopit »

eddy писал(а):
31.01.2011 11:41
чтобы удалить из истории дубликаты и отсортировать содержимое.
а для чего это нужно?
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.
Спасибо сказали:
Аватара пользователя
Dreamer77
Сообщения: 202
ОС: Debian, openSUSE, Mac OS X

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение Dreamer77 »

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
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение eddy »

SLEDopit писал(а):
31.01.2011 11:42
eddy писал(а):
31.01.2011 11:41
чтобы удалить из истории дубликаты и отсортировать содержимое.
а для чего это нужно?

Память дырявая. А так - посмотрел по истории - и нашел удобную утилитку, про которую уже и забыл, как называется...
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение SLEDopit »

Dreamer77 писал(а):
31.01.2011 11:55
Такое возможно сделать?
Напишите в .bashrc просто

Код: Выделить всё

HISTCONTROL=ignoredups
без erasedups.
eddy писал(а):
31.01.2011 11:58
Память дырявая. А так - посмотрел по истории - и нашел удобную утилитку, про которую уже и забыл, как называется...
Нет, ну это понятно, я тоже для этого хистори использую (:
Зачем удалять и сортировать?
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.
Спасибо сказали:
Аватара пользователя
Dreamer77
Сообщения: 202
ОС: Debian, openSUSE, Mac OS X

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение Dreamer77 »

SLEDopit писал(а):
31.01.2011 12:08
Напишите в .bashrc просто
Код
HISTCONTROL=ignoredups
без erasedups.
В этом случае не выполняется пункт 2.
Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение eddy »

SLEDopit писал(а):
31.01.2011 12:08
Зачем удалять и сортировать?

Потому что, во-первых, мне не нужно 100500 команд gcc с разными параметрами - я удаляю все параметры командной строки, оставляя лишь название команды. А во-вторых, в отсортированной истории искать попроще :)
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение SLEDopit »

Dreamer77 писал(а):
31.01.2011 12:13
В этом случае не выполняется пункт 2.
Да, действительно. Я как то не обратил внимания.
eddy писал(а):
31.01.2011 12:15
А во-вторых, в отсортированной истории искать попроще
А, а у меня просто 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.
Спасибо сказали:
Аватара пользователя
Dreamer77
Сообщения: 202
ОС: Debian, openSUSE, Mac OS X

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение Dreamer77 »

SLEDopit писал(а):
31.01.2011 12:18
А, а у меня просто history пишется с таймстампом, так проще найти что и когда было сделано.
Не совсем понял что это такое.
Но натолкнуло меня на мысль -- можно ли организовать history так, чтобы были только уникальные команды в течение суток, или в течение другого временного интервала?
Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение t.t »

Dreamer77 писал(а):
31.01.2011 12:24
Но натолкнуло меня на мысль -- можно ли организовать history так, чтобы были только уникальные команды в течение суток, или в течение другого временного интервала?
Только дополнительной обработкой файла истории или правкой исходников bash.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение SLEDopit »

Dreamer77 писал(а):
31.01.2011 12:24
Не совсем понял что это такое.
вывод 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.
Спасибо сказали:
Аватара пользователя
Dreamer77
Сообщения: 202
ОС: Debian, openSUSE, Mac OS X

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение Dreamer77 »

SLEDopit, очень удобно, как такое можно реализовать? И где, помимо мана, можно почитать про полезные возможности?

t.t писал(а):
31.01.2011 12:52
Только дополнительной обработкой файла истории или правкой исходников bash.
Я так и думал. Чудес не бывает.
Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение SLEDopit »

SLEDopit писал(а):
31.01.2011 12:56
как такое можно реализовать?

Код: Выделить всё

export HISTTIMEFORMAT='%F %T '

Dreamer77 писал(а):
31.01.2011 13:25
И где, помимо мана, можно почитать про полезные возможности?
Ну раз так неохота читать ман, то можно погуглить статейки по настройке 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.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение t.t »

SLEDopit писал(а):
31.01.2011 14:32
Dreamer77 писал(а):
31.01.2011 13:25
И где, помимо мана, можно почитать про полезные возможности?
Ну раз так неохота читать ман, то можно
…почитать info. (: Там даже подробнее.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение sash-kan »

Dreamer77 писал(а):
31.01.2011 12:13
В этом случае не выполняется пункт 2.
вот этот:
Dreamer77 писал(а):
31.01.2011 11:55
2. При введении идентичной последовательности команды, они бы не дублировалась, т.е. после
make km
km
make clean
make km
km
make clean
в недавней истории осталось только один блок
make km
km
make clean
?
легко.
$ make km && km && make clean

p.s. а и.и. пока не изобретён. и в программах из gnu вы даже его признаков не отыщете.

Dreamer77 писал(а):
31.01.2011 12:24
SLEDopit писал(а):
31.01.2011 12:18
А, а у меня просто history пишется с таймстампом, так проще найти что и когда было сделано.
Не совсем понял что это такое.
$ man -P 'less -rp HISTTIMEFORMAT' bash
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Dreamer77
Сообщения: 202
ОС: Debian, openSUSE, Mac OS X

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение Dreamer77 »

sash-kan писал(а):
31.01.2011 15:03
?
легко.
$ make km && km && make clean
бесспорно это будет работать. Только в этом случае теряется смысл компиляции.
Хотя для режима отладки подойдет.

sash-kan писал(а):
31.01.2011 15:03
man -P 'less -rp HISTTIMEFORMAT' bash
спасибо, понял.
Понял свою безграмотность консольную. Умом понимаю эту строчку, а вот как именно она работает -- не знаю.

t.t писал(а):
31.01.2011 14:42
почитать info. (: Там даже подробнее.
так и сделаю. Я совсем не против читать маны=)
Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение SLEDopit »

Dreamer77 писал(а):
31.01.2011 16:05
а вот как именно она работает -- не знаю.

Код: Выделить всё

man -P 'less -rp HISTTIMEFORMAT' bash
man bash - вызывает справочную страничку по 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.
Спасибо сказали:
Аватара пользователя
Babusha
Сообщения: 203
ОС: Убунту

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение Babusha »

Можно попробовать такой скрипт который из файла .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"
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение SLEDopit »

Babusha писал(а):
31.01.2011 16:23
Можно попробовать такой скрипт который из файла .bash_history удаляет повторяющиеся строки.
о боже.

Код: Выделить всё

history | awk '!_[$2$3]++' > .bash_history.tmp; mv .bash_history.tmp .bash_history
($2$3 - зависит от вывода хистори от $0 до неизвестно чего)
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.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение t.t »

Кстати, а зачем сохранять «последоальность команд, введённых ранее»? Может быть, подойдёт совмещение опции erasedups с помещением файла истории под управление версиями?
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
Dreamer77
Сообщения: 202
ОС: Debian, openSUSE, Mac OS X

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение Dreamer77 »

t.t писал(а):
31.01.2011 17:08
Кстати, а зачем сохранять «последоальность команд, введённых ранее»?
Иногда выполняется сложный набор команд, который хочется сохранить в том же порядке, чтобы можно было посмотреть после и снова в той же последовательности выполнить. Хотя такое требовалось довольно редко. Т.ч. наиболее вероятно на рабочем компе включу erasedups.


t.t писал(а):
31.01.2011 17:08
совмещение опции erasedups с помещением файла истории под управление версиями?
Что есть управление версиями и как совмещать с историей?
Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение t.t »

Dreamer77 писал(а):
31.01.2011 17:54
t.t писал(а):
31.01.2011 17:08
Кстати, а зачем сохранять «последоальность команд, введённых ранее»?
Иногда выполняется сложный набор команд, который хочется сохранить в том же порядке, чтобы можно было посмотреть после и снова в той же последовательности выполнить. Хотя такое требовалось довольно редко. Т.ч. наиболее вероятно на рабочем компе включу erasedups.
Да, думаю, Вам это вполне подойдёт.

Dreamer77 писал(а):
31.01.2011 17:54
t.t писал(а):
31.01.2011 17:08
совмещение опции erasedups с помещением файла истории под управление версиями?
Что есть управление версиями и как совмещать с историей?
Системы управления версиями. Например, git. У меня весь домашний каталог под его управлением находится. В итоге (в частности) всегда есть возможность вернуться (временно) к любой отмеченной ранее версии любого файла; в том числе и .bash_history. Я в ближайшее время планирую написать именно о применении СУВ «в мирных целях». Если интересует, дам в этой теме ссылку, когда будет готово.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
Dreamer77
Сообщения: 202
ОС: Debian, openSUSE, Mac OS X

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение Dreamer77 »

Очень интересует.

По идее используя СУВ можно каждый день создавать новый history файл, при этом работая с историей предыдущих дней. После окончания дня дописывать уникальный набор команд в старый history файл. Если при этом еще включить таймстамп, то будет очень информатиыный файл истории, при этом не переполнынный лишними командами.
Хотя и без СУВ можно такое организовать.

Надо побольше узнать о СУВ, ибо можно использовать ее как замену бэкапу.
Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение t.t »

Dreamer77 писал(а):
31.01.2011 19:06
Очень интересует.

По идее используя СУВ можно каждый день создавать новый history файл, при этом работая с историей предыдущих дней. После окончания дня дописывать уникальный набор команд в старый history файл. Если при этом еще включить таймстамп, то будет очень информатиыный файл истории, при этом не переполнынный лишними командами.
Хотя и без СУВ можно такое организовать.

Надо побольше узнать о СУВ, ибо можно использовать ее как замену бэкапу.
Да, и как замену бэкапу в том числе. Хорошо, как только текст будет готов, выложу здесь ссылку.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение SLEDopit »

Dreamer77 писал(а):
31.01.2011 19:06
ибо можно использовать ее как замену бэкапу.
Если мне память не изменяет, то одно из основных условий бэкапа - копия должна быть хотя бы на другой физической машине (в идеале на удаленной машине). Вы собираетесь версии постоянно по сети гонять?
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.
Спасибо сказали:
Аватара пользователя
Dreamer77
Сообщения: 202
ОС: Debian, openSUSE, Mac OS X

Re: bash. как предотвратить запись идентичных команд в историю

Сообщение Dreamer77 »

Бэкап тоже "версии" по сети гоняет. Ведь сохраняется не полная копия, а только измененные файлы.
Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X
Спасибо сказали: