在Zsh和Bash之间共享或同步历史记录


12

我经常发现自己在Bash和Zsh之间切换,并使用历史记录搜索功能来恢复命令。

但是,由于Bash和Zsh具有不同的历史记录文件,因此我经常发现我要搜索的命令已在另一个Shell中执行。

有什么方法可以在两者之间共享或同步历史记录?


1
bash和zsh的语法足够不同,以至于您最终得到许多在复制到另一个shell时无法使用的命令。
吉尔(Gilles)“所以,别再邪恶了”,

Answers:


10

如果对bash和zsh使用默认值:

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

现在,两个外壳中都具有相同的历史记录文件。


2
这真的有效吗?这两个历史文件的格式完全不同!
尼尔·特拉夫特

1
是的,两个外壳使用相同的格式。每行一个命令。
Rufo El Magufo 2014年

3
我的.zsh_history有类似的行,: 1399608924:0;hg diff而我的.bash_history有简单的行hg diff。也许是因为我正在使用oh-my-zsh?
尼尔·特拉夫特

也许。或zsh的某些选项。我不知道。
Rufo El Magufo 2014年

4
您需要unsetopt EXTENDED_HISTORY获取与bash兼容的仅命令历史记录。
Matija Nalis

2

不完全是您要查找的内容,但是为了从bash导入到zsh,可以使用以下node.js脚本:

// This is how I used it:
// $ 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){
  console.log(": "+ (time++) + ":0;"+line);
});

资源


1

作为对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);
});
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.