3

Обычно я использую SSH на нескольких удаленных хостах, которые являются виртуальными машинами, и воссоздаю их каждые 5-6 дней. Я теряю всю свою историю bash в этих виртуальных машинах, как только уничтожаю и воссоздаю их.

Есть ли способ, которым я могу поделиться историей Bash и использовать ее в будущем? (Что-то вроде Dropbox, но только для файла bash_history)

1 ответ1

6

Взгляните на проект Bashhub. По сути, это именно то, что вы просите - выпадающий список для истории bash, но они добавили инструменты для ссылки на историю со всех ваших компьютеров, при условии, что у них есть доступ к Интернету. Есть обоснованные опасения по поводу отправки ваших взаимодействий с оболочкой третьей стороне (например, работодателю, частной жизни, работе с конфиденциальным материалом), но если они не являются существенным фактором, это кажется хорошим решением. Похоже, что они не открыли серверный компонент кода с открытым исходным кодом, что было бы неплохо для устранения ранее упомянутых проблем.

Существует множество менее сложных методов, которые вы можете использовать, особенно если у каждой машины есть ssh-доступ друг к другу или, по крайней мере, каждая из них может общаться с одним центральным сервером через ssh. Любое решение, использующее несколько компьютеров, которые могут использоваться одновременно, обновляет общий файл истории (либо в одном связанном местоположении, либо в распределенных обновлениях), что несколько нарушит возможности расширения истории bash - например, вызов последней команды с помощью !! может дать вам неправильную команду. Это всего лишь некоторые идеи, которые нужно конкретизировать:

  • Сконфигурируйте общий ресурс NFS с сервера, смонтируйте на каждом компьютере, вставьте с него ссылку на ваш файл .bash_history
  • Используйте возможность bash PROMPT_COMMAND, чтобы добавить удаленный файл вашей последней командой (например, в .bashrc PROMPT_COMMAND="append_history" затем добавить функцию append_history () { ( ssh you@yourserver "echo !! >> ~/common_bash_history" ) & } . Я поместил команду ssh в подоболочку и задал ее, чтобы убрать задержку после ввода команды. Затем вам придется периодически выдвигать изменения из файла common_bash_history на каждый компьютер (только добавляя уникальные записи).

  • Периодическое задание cron, которое запускается на одной из машин ("сервер"), которая извлекает истории из каждой, создает мастера и выталкивает его.

В моем случае Bashhub не будет работать по причинам, указанным выше. Я искал «идеальное» решение для этого и не нашел его - на данный момент я решил объединить все свои истории с каждой машины в основной файл истории на одном сервере. Но я не помещаю агрегированные результаты обратно в файл истории каждой машины; Для этого я использую отдельный файл, который позволяет мне добавлять такие вещи, как то, с какой машины он пришел, и я настраиваю новые функции поиска и завершения для агрегатного файла (который я использую для «долгосрочной» истории) и оставляю историю bashs расширение / завершение без изменений (который я использую для «краткосрочной» истории). Если бы bashhub сделал доступным как серверное программное обеспечение, так и клиентское программное обеспечение, это было бы весьма отточенной альтернативой решения (взлома), которое я создал вместе.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .