同様の質問がありますここしかし、別の目標を達成したいと思います。セッション間で記録を共有したいのですが異なるセッションで実行されるコマンドを混在させる必要はありません。
たとえば、AとBという2つのシェルセッションがあるとします。 Aにいくつかのコマンドを入力します。
A$ ls ~
A$ ls /etc
Bから:
B$ git status
B$ git log
シェルを入力すると、そのhistory
シェルのすべてのコマンドが表示されます。一緒に、後ろに他のシェルのコマンド - これにより、常にuparrowを使用して現在のシェルから最後のコマンドを取得できます。つまり、history
シェルAでは、次のように表示する必要があります。
git status
git log
ls ~
ls /etc
シェルBでは、次のように表示する必要があります。
ls ~
ls /etc
git status
git log
どうすればいいですか?
ベストアンサー1
組み込みのソリューションはないようですが、手動で実装することはそれほど難しくないことがわかりました。各セッションの履歴を別々に保存し、各プロンプトでそれを再生成する必要があります(言葉のように遅くはありません)。コアロジックは次のとおりです。
# on every prompt, save new history to dedicated file and recreate full history
# by reading all files, always keeping history from current session on top.
update_history () {
history -a ${HISTFILE}.$$
history -c
history -r
for f in `ls ${HISTFILE}.[0-9]* | grep -v "${HISTFILE}.$$\$"`; do
history -r $f
done
history -r "${HISTFILE}.$$"
}
export PROMPT_COMMAND='update_history'
# merge session history into main history file on bash exit
merge_session_history () {
cat ${HISTFILE}.$$ >> $HISTFILE
rm ${HISTFILE}.$$
}
trap merge_session_history EXIT
バラよりこの点いくつかの保護措置とパフォーマンスの最適化を含む完全なソリューションです。