LINUX.ORG.RU

Работа с историей команд в bash

 


2

3

Вот bash сохраняет историю команд. А существуют ли комбинации, позволяющие находить нужную команду из истории. Допустим я помню, что несколько дней назад использовал однострочник содержащий «echo 'SELECT », как мне его вызвать в командную строку?
И ещё, история ведь сохраняется в .bash_history. А если у меня открыты несколько терминалов, то как сохраняется история? Много раз было, листаю историю стрелками в командной строке, а там история только одного терминала и причём не последнего.

★★★★★

Ctrl + R

А если у меня открыты несколько терминалов, то как сохраняется история?

При закрытии терминала, но можно сделать чтоб при каждом выполнении команды она писалась в хистори.

alozovskoy ★★★★★ ()

Много раз было, листаю историю стрелками в командной строке, а там история только одного терминала и причём не последнего

Не слежу за развитием, bash что ли до сих пор не перенял фичу с общей историей, как в zsh?

zolden ★★★★★ ()

Можно еще

"\e[A": history-search-backward
"\e[B": history-search-forward

в .inputrc, тогда просто стрелками можно будет просматривать

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

Не слежу за развитием, bash что ли до сих пор не перенял фичу с общей историей, как в zsh?

Там всегда можно было написать что-то вроде history -a; history -r в PROMPT_COMMAND. Не знаю, кому может только понадобиться такая глупость. Пользуюсь zsh пять лет, и включено только сохранение в файл после каждой команды.

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

Ctrl-s, буду оригинален.

действительно. может, подскажешь, каким макаром включение скроллока помогает работе с историей команд в шелле? и почему ты не упомянул её антипода - Ctrl+q? :)

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

да никакой разницы. унылые вы все тут, шуток не понимаити.. )))
тред не взлетел даже несмотря на 4 одинаковых ответа подряд. то ли дело «в былые времена» (искать лень, но такие треды были, такие треды...)

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

Баш использует ридлайн, и все бинды ридлайна справедливы для интерактивного баша, в этом ты можешь убедиться пробив bind -P | grep forward-search-history и навернув man bash, где прямо говорится: READLINE - This is the library that handles reading input when using an interactive shell

А не работает оно изкоробки потому что надо stty -ixon. Разумные люди первым делом добавляют это в профиль. Но ты видимо не разумный, ты просто пятизвездочный кукаретик про «былые времена».

:^)

entefeed ☆☆☆ ()
Ответ на: комментарий от aol

Азазах лалка да у тебя бамбит!

Даа, прямо чувствуется та самая атмосфера «былых времен». Может еще про нее расскажешь? Такие то треды были, такие треды!

entefeed ☆☆☆ ()
Ответ на: комментарий от aol

Ctrl-s, буду оригинален.

действительно. может, подскажешь, каким макаром включение скроллока помогает работе с историей команд в шелле?

Я расскажу.
Ctrl+R немного упорот, так как повторное Ctrl+R находит следующее вхождение назад по истории. А вот искать вперед - Ctrl+S. Только по дефолту Ctrl+S действительно вызывает Scroll Lock. Чтобы этого не было, нужно запустить stty -ixon. Или рекомендуют в .bashrc прописать [[ $- == *i* ]] && stty -ixon .

Кто мне расскажет как по-другому искать «вперед» по истории - буду премного благодарен.

Да, еще по теме. Если искать по началу слова, то достаточно PgUp и PgDown; должно работать по дефолту.

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

как по-другому искать «вперед» по истории

Не так чтобы по-другому, но в vi режиме оно несколько проще из-за наличия n и N.

xaizek ★★★★★ ()

Про Ctrl-R сказали, а про историю практически нет. Вот можно глянуть пример конфигурации. Там пять строк именно для истории, в том числе для добавления к ней вместо полной замены (так что ничего не должно теряться). Рекомендую поискать на предмет этих опций/переменных в man bash.

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

Ctrl+R немного упорот, так как повторное Ctrl+R находит следующее вхождение назад по истории.

А не кто иной ли здесь упорот? Куда еще должна вести нас клавиша с мнемоникой «reverse»? Вперед?

[[ $- == *i* ]]

И зачем здесь проверка на интерактивность? Вы же про ~/.bashrc, не?

Zmicier ★★★★★ ()

Странно что все вышеотписавшиеся товарищи так и не вспомнили про Ctrl+r.

h578b1bde ★☆ ()
Последнее исправление: h578b1bde (всего исправлений: 1)
less ~/.bash_history

Прокрутка стрелочками или PgUp, PgDown. Копирование: выделить мышкой с зажатой левой потом вставить в соседний терминал: клик средней. Не подходит ?

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

2 чая этому господину. Давно использую и просто не понимаю, как можно без этого жить.

conformist ★★★ ()

есть что то с ! и / /

короче «для понимания рекурсии(как и итерации) нужно для начала понять что такое рекурсия(ну и сепульки)»

man bash

в просмотрщике (который обычно less у man) нажми /

и поищи где в bash_man_файле о !! и прочих !!-вариантах - там есть формы для вызова не первого в обратном хронологическом подходящего шаблону.

вообще современные man-страницы очень не в духе man-страниц как они должны быть и какими они даже бывали.

см http://pic.plover.com/UnixReader/reader.pdf (это собственно A Research UNIX Reader: Annotated Excerpts from the Programmer’s Manual, 1971-1986 M. Douglas McIlroy)

qulinxao ★★☆ ()

крч

$man bash

press &

press \

press !

press Return | ^j | ^m | ^k ....

и гдето в 42-42 строке есть вот такое

!?string[?]

ps.

кстати чё там спотоками и форками в шелл чтобы

сделать то что неполучилось как


$ echo "&\"|man bash

:)

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

начинаешь писать начало команды, а потом стрелка вверх/вниз - поиск по истории таких команд

false ★★★★★ ()

Единственное что понял из треда, что есть бесполезное сочетание ctrl+r и есть всякие непонятные красноглазые методы.

sunny1983 ★★★★★ ()

У меня

# history {{{
shopt -s histappend
export HISTSIZE=
export HISTFILESIZE=
export HISTCONTROL=ignoreboth
# }}}

Ну и Ctrl+R само собой (не знаю, советовали ещё или нет).

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