사용 사례: 소스 제어의 머신 간에 zsh 기록을 배포합니다.
zsh의 기록으로 이를 달성할 수 있습니까? 버전 제어 시스템 간에 기록을 동기화할 수 있습니까? 이는 명령을 다시 입력하고 빠른 추적을 방지하기 위한 것입니다.
답변1
당신이 원하는 것 같아요배쉬허브:
Bashhub는 모든 세션과 시스템에 입력된 모든 터미널 명령을 저장하고 모든 명령에 대한 강력한 쿼리를 제공합니다.
Bash 및 Zsh를 지원하고 모든 것에 대한 멋진 cli를 제공합니다.
편집하다:BashHub 서버를 실행하는 사람을 100% 신뢰하지 않고 비공개로 유지되어야 하는 명령이 있는 경우 다음을 수행해야 합니다.나만의 BashHub 서버 실행.
답변2
이것은 사용 방법 bash
또는zsh
in zsh
함수는 precmd
각각의 새로운 프롬프트 전에 실행된다는 점에서 in과 유사합니다.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개의 세션을 사용하고 모든 컴퓨터가 온라인 상태이며 모든 기록이 성공적으로 업데이트된다는 것입니다.
기록을 병합하거나 기록을 순서대로 유지하기 위해 몇 가지 추가 단계를 추가할 수 있습니다.
자식 사용:
- 명령을 입력하다
- 변경 사항 커밋
- 변경 사항을 저장소에 푸시
- 다른 모든 컴퓨터에서 변경 사항 가져오기
내가 이해하는 한 이것은 작은 문제가 아닙니다. 예를 들어, 동일한 기록을 사용하여 두 개의 컴퓨터에 로그인한 다음 동시에 두 개의 다른 명령을 입력합니다. 두 명령이 모두 저장되고 기록이 다르며 서로 덮어쓰나요?
분산된 일관성/합의를 추가로 조사하려면 다음을 수행하십시오.