Zsh:マシン間の一貫した記録

Zsh:マシン間の一貫した記録

ユースケース:ソース管理のマシン間にzsh履歴を配布します。

zshの記録でこれを達成できますか?バージョン管理システム間で履歴を同期できますか?これはコマンドを再入力し、迅速なトレースを防ぐためです。

答え1

欲しいと思うバッシュハブ:

Bashhubは、すべてのセッションとシステムに入力されたすべての端末コマンドを保存し、すべてのコマンドに対する強力なクエリを提供します。

BashとZshをサポートし、すべてのための素晴らしいcliを提供します。

編集する:BashHub サーバーを実行しているユーザーを 100% 信頼せずに非公開にする必要があるコマンドがある場合は、次の手順を実行する必要があります。独自のBashHubサーバーを実行する

答え2

これは使用方法bashまたはzsh

inzsh関数は、precmdそれぞれの新しいプロンプトの前に実行されるという点でinと似ています。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つだけ使用し、すべてのコンピュータがオンラインであり、すべての履歴が正常に更新されることです。

レコードをマージしたり、レコードを順番に維持したりするために、いくつかの追加手順を追加できます。

子供の使用:

  • コマンドを入力する
  • 変更のコミット
  • 変更をリポジトリにプッシュ
  • 他のすべてのコンピュータから変更をインポートする

私が理解している限り、これは小さな問題ではありません。たとえば、同じ履歴を使用して2つのコンピュータにログインし、同時に2つの異なるコマンドを入力します。両方のコマンドが保存され、履歴が異なり、互いに上書きされますか?

分散した一貫性/合意をさらに調査するには、次のようにします。

関連情報