Bash

在 Zsh 和 Bash 之間共享或同步歷史記錄

  • January 30, 2022

我經常發現自己在 Bash 和 Zsh 之間切換,並使用歷史搜尋功能來恢復命令。

但是,由於 Bash 和 Zsh 具有不同的歷史文件,我經常發現我正在搜尋的命令已在另一個 shell 中執行。

有沒有辦法在兩者之間共享或同步歷史記錄?

如果您使用 bash 和 zsh 的預設值:

$ cat ~/.histfile >> ~/.bash_history
$ youreditor ~/.zshrc
# Here change your config to:
HISTFILE=~/.bash_history
$ rm ~/.histfile

現在,您在兩個 shell 中都有相同的歷史文件。

作為對 Elad 的回應,人們可能有 .bash_history 文件,在每個以 (#) 開頭的命令之前有一個額外的行,並且在 (123456789) 之後有尾隨數字,例如:#123456789。如果您的 bash_history 文件有這些額外的行,請使用此 Elad 程式碼的修改版本來處理乾淨的 zsh 格式的歷史記錄以供使用。感謝 Elad 的快速轉換程式碼。

/*
* You should backup your .bash_history file first doing this:
* $ cp ~/.bash_history ~/.bash_history.backup
* 
* create the .js file to use first:
* $ touch ~/.bash-history-to-zsh-history.js
*
* This is how I use it based on Elads example:
* $ node ~/.bash-history-to-zsh-history.js >> ~/.zsh_history
*
**/

var fs = require("fs");
var a = fs.readFileSync(".bash_history");
var time = Date.now();
a.toString().split("\n").forEach(function(line){
 if (line.indexOf("#")!=0) console.log(": "+ (time++) + ":0;"+line);
});

引用自:https://unix.stackexchange.com/questions/21008