Dê uma olhada no projeto Bashhub . É efetivamente exatamente o que você está pedindo - uma caixa de depósito para o histórico bash - mas eles adicionaram ferramentas para fazer referência ao histórico de todas as suas máquinas, assumindo que elas tenham acesso à Internet. Existem preocupações válidas sobre o envio de suas interações de shell para terceiros (por exemplo, empregador, privacidade, trabalho em material confidencial), mas se isso não for um fator significativo, isso parece ser uma ótima solução. Não parece que eles abriram o código do código, infelizmente, o que seria bom para mitigar os problemas mencionados anteriormente.
Existem várias técnicas menos sofisticadas que você pode usar, especialmente se cada máquina tiver acesso ssh, ou pelo menos cada uma pode falar com um servidor central via ssh. Qualquer solução que envolva várias máquinas que possam estar sendo usadas simultaneamente atualizando um arquivo de histórico comum (seja em um único local vinculado ou em atualizações distribuídas) afetará um pouco os recursos de expansão de histórico do bash - por exemplo, recordando o último comando com !! poderia te dar o comando errado. Estas são apenas algumas ideias que precisam ser desenvolvidas:
- Configure um compartilhamento NFS de um servidor, monte em cada máquina, associe sym seu arquivo .bash_history dele
-
Use o recurso bash PROMPT_COMMAND para anexar um arquivo remoto com seu último comando (por exemplo, em .bashrc
PROMPT_COMMAND="append_history"
, em seguida, adicione a funçãoappend_history () { ( ssh you@yourserver "echo !! >> ~/common_bash_history" ) & }
. Coloquei o comando ssh em um subshell e fiz o background para remover o atraso depois de digitar um comando.Você teria que periodicamente empurrar as alterações do arquivo common_bash_history para cada máquina (adicionando apenas entradas exclusivas).
-
Tarefa cron periódica executada em uma das máquinas ('servidor') que puxa os históricos de cada um, cria um mestre e o envia para fora.
No meu caso, o Bashhub não funcionaria, pelas razões mencionadas acima. Eu estive procurando por uma solução 'perfeita' para isso e não a encontrei - o que eu decidi por enquanto é agregar todos os meus históricos de cada máquina em um arquivo de histórico mestre em um servidor. Mas não envio os resultados agregados de volta ao arquivo de histórico de cada máquina; Eu uso um arquivo separado para isso, o que me permite adicionar coisas como de qual máquina veio, e eu configurei novas funções de busca e conclusão para o arquivo agregado (que eu uso para histórico de 'longo prazo') e deixando o histórico de bashs expansão / completação intacta (que eu uso para histórico de 'curto prazo'). Se o bashhub disponibilizasse o software do servidor, bem como o software cliente, seria uma alternativa altamente polida da solução (hack) que eu juntei.