berbagi atau menyinkronkan riwayat antara Zsh dan Bash


12

Saya sering menemukan diri saya beralih antara Bash dan Zsh, dan menggunakan fungsi pencarian riwayat untuk memulihkan perintah.

Namun, karena Bash dan Zsh memiliki file sejarah yang berbeda, saya sering menemukan bahwa perintah yang saya cari telah dieksekusi di shell lain.

Apakah ada cara untuk berbagi atau menyinkronkan riwayat antara keduanya?


1
Sintaks bash dan zsh cukup berbeda sehingga Anda akan berakhir dengan banyak perintah yang tidak berfungsi ketika disalin ke shell lain.
Gilles 'SO- stop being evil'

Jawaban:


10

Jika Anda menggunakan default untuk bash dan zsh:

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

Sekarang Anda memiliki file yang sama untuk histori di kedua shell.


2
Apakah ini benar-benar berfungsi ?? Kedua histfile memiliki format yang sama sekali berbeda!
Neil Traft

1
Ya, kedua shell menggunakan format yang sama. Satu perintah per baris.
Rufo El Magufo

3
.Zsh_history saya memiliki garis seperti : 1399608924:0;hg diffsedangkan .bash_history saya memiliki sederhana hg diff. Mungkin karena saya menggunakan oh-my-zsh?
Neil Traft

Mungkin. Atau beberapa opsi zsh. Saya tidak tahu
Rufo El Magufo

4
yang perlu Anda lakukan unsetopt EXTENDED_HISTORYuntuk mendapatkan histori hanya-perintah bash-kompatibel.
Matija Nalis

2

Bukan apa yang Anda cari, tetapi untuk mengimpor dari bash ke zsh, Anda dapat menggunakan skrip node.js ini:

// 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);
});

Sumber


1

Menanggapi Elad, orang mungkin memiliki file .bash_history yang memiliki baris tambahan sebelum setiap perintah yang dimulai dengan (#) dan memiliki digit tambahan berikut (123456789), misalnya: # 123456789. Jika file bash_history Anda memiliki baris tambahan ini, gunakan versi modifikasi dari kode Elad ini untuk memproses riwayat berformat zsh yang bersih untuk digunakan. Terima kasih Elad untuk kode konversi cepat.

/*
 * 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);
});
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.