Обычно я использую SSH на нескольких удаленных хостах, которые являются виртуальными машинами, и воссоздаю их каждые 5-6 дней. Я теряю всю свою историю bash в этих виртуальных машинах, как только уничтожаю и воссоздаю их.
Есть ли способ, которым я могу поделиться историей Bash и использовать ее в будущем? (Что-то вроде Dropbox, но только для файла bash_history)
~/.bash_history
? Нет DropBox, нет внешнего, нет необходимости подключения к интернету, но только потребности, необходимые для общей папки. (ps> иначе вы всегда можете вручную скопировать файл ...). Или вы можете взять файл с хоста через ssh со скриптом в cron ....Ответы:
Взгляните на проект Bashhub . По сути, это именно то, о чем вы просите - выпадающий список истории bash, но они добавили инструменты для ссылки на историю со всех ваших компьютеров, при условии, что у них есть доступ к Интернету. Есть обоснованные опасения по поводу отправки ваших взаимодействий с оболочкой третьей стороне (например, работодателю, частной жизни, работе с конфиденциальным материалом), но если они не являются существенным фактором, это кажется хорошим решением. Похоже, что они не открыли серверный компонент кода с открытым исходным кодом, что было бы неплохо для устранения ранее упомянутых проблем.
Существует множество менее сложных методов, которые вы можете использовать, особенно если у каждой машины есть ssh-доступ друг к другу или, по крайней мере, каждая из них может общаться с одним центральным сервером через ssh. Любое решение, использующее несколько компьютеров, которые могут использоваться одновременно, обновляет общий файл истории (либо в одном связанном местоположении, либо в распределенных обновлениях), что несколько нарушит возможности расширения истории bash - например, вызов последней команды с помощью !! может дать вам неправильную команду. Это всего лишь некоторые идеи, которые нужно конкретизировать:
Используйте возможность 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 сделал доступным как серверное программное обеспечение, так и клиентское программное обеспечение, это было бы весьма отточенной альтернативой решения (хак).
источник