Zsh:机器之间的历史记录一致

Zsh:机器之间的历史记录一致

用例:在源代码管理中的计算机之间分发 zsh 的历史记录。

我可以用 zsh 的历史记录来实现这一点吗——将历史记录放入版本控制机器之间的同步中?这是为了避免重新输入命令和快速跟踪。

答案1

看起来像你想要的BashHub:

Bashhub 保存在所有会话和系统中输入的每个终端命令,并提供跨所有命令的强大查询。

支持 Bash 和 Zsh,并提供适用于所有内容的可爱 cli。

编辑:如果您不 100% 信任运行 BashHub 服务器的人并且拥有应保持私密的命令,那么您应该运行您自己的 BashHub 服务器

答案2

这是尝试回答如何使用bashzsh

inzsh函数与inprecmd类似,它在每个新提示之前执行。PROMPT_COMMANDbash

使用 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

使用 zsh 的示例:

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

将其添加到.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
}

为了.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"

为了更容易做到这一点

  • 设置基于密钥的 ssh 登录或无密码登录。
  • 将主机名/用户名添加到.ssh/ssh_config.

有关的:

关于这里的使用情况的一些假设是,一次只有 1 个人使用 1 个会话,所有计算机都在线,并且所有历史记录都成功更新。

您也许可以添加一些额外的步骤来合并历史记录,或保持历史记录的顺序。

使用git:

  • 输入命令
  • 提交更改
  • 将更改推送到存储库
  • 在所有其他机器上拉动更改

据我了解,这不是一个小问题。举例来说,您登录到具有相同历史记录的两台机器,但随后同时输入两个不同的命令;这两个命令都被保存了吗,历史记录是否有所不同,它们是否会相互覆盖?

要进一步研究分布式一致性/共识:

相关内容