用例:在源代码管理中的计算机之间分发 zsh 的历史记录。
我可以用 zsh 的历史记录来实现这一点吗——将历史记录放入版本控制机器之间的同步中?这是为了避免重新输入命令和快速跟踪。
答案1
看起来像你想要的BashHub:
Bashhub 保存在所有会话和系统中输入的每个终端命令,并提供跨所有命令的强大查询。
支持 Bash 和 Zsh,并提供适用于所有内容的可爱 cli。
编辑:如果您不 100% 信任运行 BashHub 服务器的人并且拥有应保持私密的命令,那么您应该运行您自己的 BashHub 服务器。
答案2
这是尝试回答如何使用bash
或zsh
inzsh
函数与inprecmd
类似,它在每个新提示之前执行。PROMPT_COMMAND
bash
使用 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
.
有关的:
- https://superuser.com/questions/410965/command-history-in-zsh
- https://superuser.com/questions/735660/whats-the-zsh-equivalent-of-bashs-prompt-command
关于这里的使用情况的一些假设是,一次只有 1 个人使用 1 个会话,所有计算机都在线,并且所有历史记录都成功更新。
您也许可以添加一些额外的步骤来合并历史记录,或保持历史记录的顺序。
使用git:
- 输入命令
- 提交更改
- 将更改推送到存储库
- 在所有其他机器上拉动更改
据我了解,这不是一个小问题。举例来说,您登录到具有相同历史记录的两台机器,但随后同时输入两个不同的命令;这两个命令都被保存了吗,历史记录是否有所不同,它们是否会相互覆盖?
要进一步研究分布式一致性/共识: