Zsh: histórico consistente entre máquinas

3

Caso de uso: distribua o histórico do zsh entre máquinas no controle de origem.

Isso é algo que eu posso alcançar com a história do zsh - colocar o histórico no controle de versão a sincronização entre as mahcines? Isso é para evitar a digitação de comandos e rastreamento rápido.

    
por Tuyen Pham 03.11.2018 / 15:29

1 resposta

0

Esta é uma tentativa de responder como, usando bash ou zsh

Em zsh , a função precmd é semelhante a PROMPT_COMMAND in bash , pois é executada antes de cada novo prompt.

Um exemplo usando o bash:

$ function precmd() {
    echo ssh copy the files to another machine
}
$ export OLD_PROMPT=$PROMPT_COMMAND
$ unset PROMPT_COMMAND && export PROMPT_COMMAND="precmd; $PROMPT_COMMAND"
ssh copy the files to another machine
$ pwd
/home/jmunsch
ssh copy the files to another machine
$ export PROMPT_COMMAND=$OLD_PROMPT

Um exemplo usando zsh:

% function precmd() {
    echo ssh copy the files to another machine
}
% pwd
/home/jmunsch
ssh copy the files to another machine
% unset -f precmd

Adicione isso ao .zshrc :

function precmd() {
    # across terminals, sessions 
    setopt APPEND_HISTORY
    export machines="192.168.43.70 192.168.43.71 192.168.43.72"
    for m in $machines; do
        scp ~/.zsh_history $m:~/.zsh_history
    done
}

Para o .bashrc :

function precmd() {
    # since bash generally saves history on session exit
    history -a # append session to history
    history -c # clear session
    history -r # read from history
    export machines="192.168.43.70 192.168.43.71 192.168.43.72"
    for m in $machines; do
        scp ~/.zsh_history $m:~/.zsh_history
    done
}
export PROMPT_COMMAND="precmd; $PROMPT_COMMAND"

Para tornar mais fácil fazer isso

  • Login do ssh com base na chave de configuração ou login sem senha.
  • Adicione nomes de host / nomes de usuários ao .ssh/ssh_config .

relacionado:

Algumas suposições sobre o uso aqui, é que apenas 1 pessoa está usando 1 sessão por vez, todas as máquinas estão online e todos os históricos são atualizados com sucesso.

Você pode adicionar algumas etapas adicionais para mesclar históricos ou manter a ordem dos históricos.

Usando o git:

  • digite um comando
  • confirmar alterações
  • enviar alterações ao repo
  • em qualquer outra máquina, receba alterações

Não é um problema trivial, pelo que entendi. Digamos, por exemplo, que você faça login em duas máquinas com o mesmo histórico, mas digite dois comandos diferentes ao mesmo tempo; ambos os comandos são salvos, as histórias divergem, sobrescrevem umas às outras?

Para pesquisas adicionais, analise consistência / consenso distribuído:

por 03.11.2018 / 16:50