Заповнення командного рядка з історії команд


84

Отже, я переглянув історію та Ctrl+ R, але вони не те, що я думав, що знаю. Чи є спосіб, який я можу набрати на початку команди та обміняти відповіді в моїй історії за допомогою деякого ярлика bash?

# mysq(some shortcut key)

Дає мені:

# mysqldump  --add-drop-table -e -q -n -C -u 
(some shortcut key)
#  mysql -u ben.dauphinee -p

Бічна примітка: Існує '<kbd> Alt + Tab </kbd>' для tty без робочого столу.
neverMind9

Відповіді:


90

Натискання Ctrl+ Rвідкриє пошук зворотної історії. Тепер почніть вводити свою команду, це дасть першу відповідність. Натискаючи Ctrl+ Rще раз (і знову), ви можете перейти по історії.

mysq(Ctrl+R)

Дав би:

mysqldump  --add-drop-table -e -q -n -C -u 

Ctrl+ Rзнову:

mysql -u ben.dauphinee -p

5
Дякую. Також Esc помістить вибрану команду у ваш командний рядок без виконання, тоді як Enter виконає вибрану команду.
Бен Дофіней

3
Я вважаю CTRL + E кращим для цього, ніж ESC, тому що втечу незручно досягти, але я вже натискаю CTRL + R, так що E є саме там. Це також розташовує курсор в кінці рядка, що зручно у випадку, якщо я хотів щось змінити (наприклад, ім'я файлу), що, як я вважаю, є звичайним випадком.
Сорпігаль

На жаль, це не працює на Cygwin
ATorras

2
Принаймні, на mac, здається, mysq(CTRL+R)(CTRL+R)він не проходить через команди, що починаються з "mysq". Вам потрібно зробити це (CTRL+R)mysq(CTRL+R)замість
BlueRaja - Danny Pflughoeft

62

Щоб розширити те, що сказав Гілл, у мене є наступне, .inputrcщоб прив’язати клавішу зі стрілкою вгору / вниз history-search-backwardта history-search-forward:

# Key bindings, up/down arrow searches through history
"\e[A": history-search-backward
"\e[B": history-search-forward
"\eOA": history-search-backward
"\eOB": history-search-forward

Просто введіть щось (необов’язково), потім натисніть клавішу зі стрілкою вгору / вниз, щоб шукати в історії команди, які починаються з того, що ви ввели.

Для того, щоб зробити це в .bashrcніж .inputrc, ви можете використовувати:

bind '"\e[A": history-search-backward'

3
ці прив'язки належать до ~ / .inputrc ... дякую за підтримку моєї ліні.
Мартін Цайтлер

Варто зазначити, що "\ e" має вирішальне значення, принаймні для дебютантів басу. Просто введення Ctrl-V для отримання натискання клавіші для вашої команди не означає всю історію. Наприклад, набравши Ctrl-V Meta-P (тобто Alt-P) повертається ^ [p - щоб отримати потрібну поведінку, замініть "^ [" на "\ e".
MrMas

Погодьтеся з @syslogic - помістіть рядки в .inputrc і відмініть прив'язку та одинарні лапки.
MrMas

скопіюйте це вставлення в .inputrc на osx, я отримаю: source ~ / .inputrc -bash: \ e [A :: команда не знайдена -bash: \ e [B :: команда не знайдена -bash: \ eOA :: команда не знайдено -bash: \ eOB :: команда не знайдена
Морж Кіт

1
Див. Superuser.com/questions/241187/how-do-i-reload-inputrc . Ви не можете створити файл.
райчі

7

Ви також можете натиснути PAGEUPкнопку, щоб автоматично виконати команду. В основному він шукає bash_historyфайл.


Ви повинні скаментувати два рядки /etc/inputrcабо додати ці два рядки у свій $HOME/.inputrcфайл: "\e[5~": history-search-backward "\e[6~": history-search-forward
garlix

5

Ви можете використовувати команди readline history-search-backwardта history-search-forwardпереходити між рядками команд, починаючи з префіксу, який ви вже ввели. Жодна з цих команд не прив’язана до клавіш у конфігурації за замовчуванням.

Zsh (zle) має подібні команди history-beginning-search-backwardі history-beginning-search-forward, також, за замовчуванням не пов'язані з клавішами. Є також history-search-backwardі history-search-forward, що використовує перше слово поточної команди як префікс для пошуку незалежно від положення курсору.


4

Якщо ви хочете отримати хороший огляд дуже подібних команд, ви можете отримати список за допомогою:

history|grep KEYSTRING

Потім скопіюйте та вставте середню кнопку миші.

Rgds - Джо

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.