Введіть лінії в історію баш


9

За замовчуванням bash завантажує лінії з ~/.bash_historyісторії. Чи можна додати користувальницький файл для завантаження? Я хочу ввести файл, що містить команди, які я часто використовую, і отримувати доступ до них через вбудований пошук.


2
Зазвичай люди додають псевдоніми для часто використовуваних команд ...
HBruijn

Це чудово. Але це не так - я використовую псевдоніми для команд, які я постійно використовую, але у мене є багато команд, які мають велику кількість аргументів, які я хочу змінити, виходячи з обставин.
rgtk

4
Вам доведеться створити якусь модифікацію файлу, яка звучить досить шалено і може не працювати. Просто зробіть ваші довгі команди скриптом оболонки, який приймає аргументи і впустіть його /usr/local/binчи щось таке
Веслі

Якщо ви їх часто використовуєте, чи все-таки вони не були б у вашій історії?

Оголосити функції в .bashrc?
Марк К Коуан

Відповіді:


13

Я тримаю це просто з alias h='history|grep'завантаженим у мій профіль Bash.

Так що, наприклад, мій робочий процес h command:h hpssa

#  h hpssa
  202  05-28-2015 11:54:33  hpssacli
  217  05-28-2015 11:54:33  hpssa -start
  225  05-28-2015 11:54:33  hpssacli -stop
  226  05-28-2015 11:54:33  hpssa -stop
  228  05-28-2015 11:54:33  hpssa -start

Якщо я хочу запустити " hpssa -stop", я просто наберіть!226


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


приємна хитрість, викрасти цю
вім

Запропонуйте, можливо, захочете ознайомитись із тим, що робить Ctrl-R для пошуку назад у вашій історії. Приготуйтеся, щоб ваш розум був роздутий ...

2
@CameronKerr Подивіться на відповідь трохи нижче цієї ( serverfault.com/a/695115/120438 ). Недоліком використання Ctrl + R у цьому конкретному випадку є те, що він дає вам відповідні команди по черзі, тоді як ewwhite's return повертає список усіх відповідних команд.
Дженні Д

Хоча це чудова хитрість, він зовсім не відповідає на питання. Я не розумію, як це найвища відповідь. Моя справа полягає в тому, що у мене є зображення докера, який продовжує втрачати історію, коли я виходжу з неї. Я подумав, що було б добре, якби я міг передати файл історії через командний рядок доdocker run ...
kumarharsh

@kumar_harsh Важко догодити.
ewwhite

7

Я раніше дуже покладався на Ctrl-R( reverse-search-historyкоманда Readline), яка шукає назад через історію, щоб отримати раніше введені довгі команди, але тепер я вважаю за краще використовувати псевдоніми та сценарії / функції оболонки. Так чи інакше, команда Bash historyвбудована може бути використана для завантаження списку спеціальних команд у вашу поточну історію.

history -r [filename]

З сторінки "bash man":

Прочитайте вміст файла історії та додайте їх до поточного списку історії.

Автоматизація пуску

Я просто спробував запустити цю команду автоматично, додавши її як останній рядок у своєму .bashrc. Однак команди з мого спеціального файлу історії були недоступні, коли я запускав нову оболонку. Здається, що історія оболонки завантажується лише з .bash_historyфайлу за замовчуванням : після обробки файлів запуску і безпосередньо перед тим, як буде представлено підказку для інтерактивної оболонки. На жаль, здається, не існує простого способу автоматизувати це.


2

Як зауважив @AnthonyGeoghegan, історія завантажується після обробки файлів запуску. Це пропонує інший спосіб попередньо завантажити потрібну історію у файл запуску:

mv .bash_history .bash_history.tmp
cat .extra_hist .bash_history.tmp > .bash_history
# or swap them, to put the extra stuff at the end of the history, for
# quicker ^R access.

Зауважте, що такий підхід може з часом додати до вашої .bash_history кілька копій ваших спеціальних команд. Ви можете обернути свої спеціальні команди за допомогою рядків коментарів, щоб ви могли їх легко знайти та видалити (через, наприклад, sed) як частину заповнення файлу .bash_history. Щось на зразок:

cp .extra_hist .bash_history
sed '/: remove from here/,/:remove to here/d' .bash_history >> .bash_history
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.