
ユースケース:ソース管理のマシン間にzsh履歴を配布します。
zshの記録でこれを達成できますか?バージョン管理システム間で履歴を同期できますか?これはコマンドを再入力し、迅速なトレースを防ぐためです。
答え1
欲しいと思うバッシュハブ:
Bashhubは、すべてのセッションとシステムに入力されたすべての端末コマンドを保存し、すべてのコマンドに対する強力なクエリを提供します。
BashとZshをサポートし、すべてのための素晴らしいcliを提供します。
編集する:BashHub サーバーを実行しているユーザーを 100% 信頼せずに非公開にする必要があるコマンドがある場合は、次の手順を実行する必要があります。独自のBashHubサーバーを実行する。
答え2
これは使用方法bash
またはzsh
inzsh
関数は、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人のセッションを1つだけ使用し、すべてのコンピュータがオンラインであり、すべての履歴が正常に更新されることです。
レコードをマージしたり、レコードを順番に維持したりするために、いくつかの追加手順を追加できます。
子供の使用:
- コマンドを入力する
- 変更のコミット
- 変更をリポジトリにプッシュ
- 他のすべてのコンピュータから変更をインポートする
私が理解している限り、これは小さな問題ではありません。たとえば、同じ履歴を使用して2つのコンピュータにログインし、同時に2つの異なるコマンドを入力します。両方のコマンドが保存され、履歴が異なり、互いに上書きされますか?
分散した一貫性/合意をさらに調査するには、次のようにします。