Вставить строки в историю Bash

9

По умолчанию bash загружает строки из ~/.bash_historyистории. Можно ли добавить пользовательский файл для загрузки? Я хочу внедрить файл, содержащий команды, которые я часто использую, и получить к ним доступ через встроенный поиск.

rgtk
источник
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


Это всего лишь мой подход, но, возможно, вы могли бы изменить то, как вы вспоминаете элементы истории. Я не думаю, что имеет смысл вводить данные в файл истории.

ewwhite
источник
хороший трюк, кража этого
Вим
Предположим, вы захотите взглянуть на то, что делает Ctrl-R для поиска в своей истории. Приготовьтесь к тому, что ваш ум взорвется ...
2
@CameronKerr Посмотрите на ответ чуть ниже этого ( serverfault.com/a/695115/120438 ). Недостатком использования Ctrl + R в данном конкретном случае является то, что он дает вам соответствующие команды по одной, в то время как ewwhite подход возвращает список всех соответствующих команд.
Дженни Д
Хотя это отличный трюк, он не отвечает на вопрос вообще. Я не понимаю, как это самый высокий голос. Мой пример использования - изображение докера, которое теряет свою историю, когда я выхожу из него. Я подумал, что было бы хорошо, если бы я мог передать файл истории через командную строкуdocker run ...
kumarharsh
@kumar_harsh Трудно угодить.
Ewwhite
7

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

history -r [filename]

Со страницы руководства bash:

Прочитайте содержимое файла истории и добавьте его в текущий список истории.

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

Я просто попытался запустить эту команду автоматически, добавив ее в качестве последней строки в моем .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
schnitz
источник