Teilen oder Synchronisieren des Verlaufs zwischen Zsh und Bash


12

Ich wechsle oft zwischen Bash und Zsh und verwende die Verlaufssuchfunktion, um einen Befehl wiederherzustellen.

Da Bash und Zsh jedoch unterschiedliche Verlaufsdateien haben, stelle ich häufig fest, dass der gesuchte Befehl in der anderen Shell ausgeführt wurde.

Gibt es eine Möglichkeit, den Verlauf zwischen den beiden zu teilen oder zu synchronisieren?


1
Die Syntax von bash und zsh ist so unterschiedlich, dass Sie am Ende viele Befehle erhalten, die beim Kopieren in die andere Shell nicht funktionieren.
Gilles 'SO - hör auf böse zu sein'

Antworten:


10

Wenn Sie die Standardeinstellungen für bash und zsh verwenden:

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

Jetzt haben Sie in beiden Shells dieselbe Datei für den Verlauf.


2
Funktioniert das wirklich? Die beiden Histfiles haben völlig unterschiedliche Formate!
Neil Traft

1
Ja, beide Shells verwenden dasselbe Format. Ein Befehl pro Zeile.
Rufo El Magufo

3
Meine .zsh_history hat Zeilen wie : 1399608924:0;hg diffmeine .bash_history einfach hg diff. Vielleicht liegt es daran, dass ich oh-my-zsh benutze?
Neil Traft

Könnte sein. Oder eine Option von zsh. Ich weiß es nicht.
Rufo El Magufo

4
Sie müssen dies tun unsetopt EXTENDED_HISTORY, um einen Bash-kompatiblen Nur-Befehl-Verlauf zu erhalten.
Matija Nalis

2

Nicht genau das, wonach Sie gesucht haben, aber um von bash nach zsh zu importieren, können Sie dieses node.js-Skript verwenden:

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

Quelle


1

Als Antwort auf Elad haben Benutzer möglicherweise .bash_history-Dateien, die vor jedem Befehl eine zusätzliche Zeile haben, die mit (#) beginnt und nachfolgende Ziffern (123456789) enthält, zum Beispiel: # 123456789. Wenn Ihre bash_history-Datei diese zusätzlichen Zeilen enthält, verwenden Sie diese geänderte Version von Elads Code, um einen sauberen zsh-formatierten Verlauf zu verarbeiten. Danke Elad für den schnellen Konvertierungscode.

/*
 * 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);
});
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.