ZshとBashの間で履歴を共有または同期する


12

私はよくBashとZshを切り替えて、履歴検索機能を使用してコマンドを復元します。

ただし、BashとZshには異なる履歴ファイルがあるため、検索しているコマンドが他のシェルで実行されたことがよくあります。

2つの間で履歴を共有または同期する方法はありますか?


1
bashとzshの構文は十分に異なっているため、他のシェルにコピーしたときに機能しないコマンドが多数含まれることになります。
Gilles「SO-邪悪なことをやめ

回答:


10

bashとzshのデフォルトを使用している場合:

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

これで、両方のシェルの履歴に同じファイルができました。


2
これは本当に機能しますか?2つのhistfileの形式は完全に異なります!
Neil Traft 2014

1
はい、両方のシェルで同じ形式を使用しています。1行に1つのコマンド。
Rufo El Magufo 2014

3
私の.zsh_historyには: 1399608924:0;hg diff、次のような行がありますhg diff。多分それは私がoh-my-zshを使っているからでしょうか?
Neil Traft 2014

多分。またはzshのいくつかのオプション。知りません。
Rufo El Magufo 2014

4
unsetopt EXTENDED_HISTORYbash互換のコマンドのみの履歴を取得する必要があります。
マティヤナリス

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への応答として、各コマンドの前に(#)で始まり、(123456789)の後に続く数字がある、.bash_historyファイルがある場合があります(例:#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);
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.