Tuy*_*ham 6 command-history zsh version-control
用例:在源代码管理中的机器之间分发 zsh 的历史记录。
这是我可以用 zsh 的历史实现的东西 - 将历史放在版本控制中机器之间的同步吗?这是为了避免重新键入命令和快速跟踪。
jmu*_*sch -1
这是尝试回答如何使用bash或zsh
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
Run Code Online (Sandbox Code Playgroud)
使用 zsh 的示例:
% function precmd() {
echo ssh copy the files to another machine
}
% pwd
/home/jmunsch
ssh copy the files to another machine
% unset -f precmd
Run Code Online (Sandbox Code Playgroud)
将其添加到.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
}
Run Code Online (Sandbox Code Playgroud)
为了.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"
Run Code Online (Sandbox Code Playgroud)
为了更容易做到这一点
.ssh/ssh_config.有关的:
关于这里的使用情况的一些假设是,一次只有 1 个人使用 1 个会话,所有计算机都在线,并且所有历史记录都成功更新。
您也许可以添加一些额外的步骤来合并历史记录,或保持历史记录的顺序。
使用git:
据我了解,这不是一个小问题。举例来说,您登录到具有相同历史记录的两台机器,但随后同时输入两个不同的命令;这两个命令都被保存了吗,历史记录是否有所不同,它们是否会相互覆盖?
要进一步研究分布式一致性/共识: