【问题标题】:How do you share zsh history between multiple machines?你如何在多台机器之间共享 zsh 历史记录?
【发布时间】:2012-05-08 23:45:31
【问题描述】:

我有一个设置让我很高兴在机器之间共享我的配置文件,但我发现我经常想在 zsh (Ctrl + R) 中搜索,但我不记得我在哪台机器上输入了命令在。理想情况下,我希望从我的任何机器中搜索一个规范的重复数据删除列表,其中包含以前的命令。鉴于我有时会在没有网络连接的情况下同时在这些机器上工作,那么合并历史文件并保持所有内容同步的明智方法是什么?

【问题讨论】:

  • 如果您同时(同时)在两台机器上工作并且它们没有网络连接,除非手动将命令重新输入到两台机器的外壳中,我不会肯定有好的解决方案。
  • 把你的历史文件放到 Dropbox 上怎么样?
  • 我不使用 Dropbox,但据我了解,我认为这行不通,因为我会在几台(可能)离线机器上同时修改文件。 Dropbox 会错误地自动合并或重命名我的历史文件,不是吗?
  • 顺便看看 setopt SHARE_HISTORY ;每次命令后都会提交历史记录。这样,多个 shell 可以共享相同的历史记录就好了。当您第二次退出时,一个 shell 不会覆盖另一个 shell 的更改。

标签: zsh zshrc


【解决方案1】:

我为 oh-my-zsh 编写了这个插件:

一个 Oh My Zsh 插件,用于 GPG 加密、使用 Git 的 Internet 同步 Zsh 历史记录 https://github.com/wulfgarpro/history-sync

【讨论】:

  • 使用一些第三方脚本并没有说zsh怎么做。
【解决方案2】:

嗯,我想您可以通过某种方式识别您的帐户...然后您可以执行以下操作:

  • 如果这是在当前计算机上启动的第一个 zsh,请修改您的 .zshrc 以将 Dropbox 或 SCM 中其他帐户的历史记录与当前历史记录连接起来
  • 然后使用 -n 对条目进行排序(按时间戳排序)
  • 如果您设置了 setopt HIST_SAVE_NO_DUPS,我猜 zsh 会删除重复项

然后你需要捕获 shell 退出,并将现有的历史记录复制到 dropbox/SCM/任何共享的地方。

【讨论】:

  • 这主要是有效的,但遗憾的是多行命令以这种方式被破坏(带有\-continuation 或do-done-blocks 的行)
【解决方案3】:

您可以为相关机器设置一个 NFS 挂载点,其中包含 .zsh_history。每台机器都需要将 HISTFILE env var 设置为 NFS 中的该文件路径。

HISTFILE env var 是强制性的,因为 ZSH 不接受符号链接,它会被使用符号链接目标的最新版本的文件替换。

我没有测试上面所说的,因为我的设置是在使用 OSX 的 VM 和 Parallels 共享文件夹之间。因此,对于 NFS,文件的完整性(顺序?)可能需要考虑,与 Dropbox 解决方案相比也是如此。

不确定,https://gist.github.com/elim/f77e3e9f06b6f8a5e788 之类的东西可以用来修复要合并的版本...

【讨论】:

    【解决方案4】:

    我使用下面的命令:

    ssh username@example.com cat ~/.zsh/.zhistory | cat ~/.zsh/.zhistory - | sort | uniq | tee ~/.zsh/.zhistory | ssh username@example.com cat \> ~/.zsh/.zhistory

    【讨论】:

    • 注意,如果您的历史记录中有跨越多行的命令,这将中断!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    相关资源
    最近更新 更多