compartir o sincronizar el historial entre Zsh y Bash

12

A menudo me encuentro cambiando entre Bash y Zsh, y usando la funcionalidad de búsqueda de historial para recuperar un comando.

Sin embargo, dado que Bash y Zsh tienen diferentes archivos de historial, a menudo encuentro que el comando que estoy buscando se ha ejecutado en el otro shell.

¿Hay alguna forma de compartir o sincronizar el historial entre los dos?

Andrei
fuente
1
La sintaxis de bash y zsh es lo suficientemente diferente como para terminar con muchos comandos que no funcionan cuando se copian al otro shell.
Gilles 'SO- deja de ser malvado'

Respuestas:

10

Si está utilizando los valores predeterminados para bash y zsh:

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

Ahora tiene el mismo archivo para el historial en ambos shells.

Rufo El Magufo
fuente
2
¿Esto realmente funciona? ¡Los dos archivos históricos tienen formatos completamente diferentes!
Neil Traft
1
Sí, ambos shells usan el mismo formato. Un comando por línea.
Rufo El Magufo
3
Mi .zsh_history tiene líneas como : 1399608924:0;hg diffmientras que mi .bash_history tiene simplemente hg diff. Tal vez es porque estoy usando oh-my-zsh?
Neil Traft
Tal vez. O alguna opción de zsh. No lo sé.
Rufo El Magufo
44
debe hacer unsetopt EXTENDED_HISTORYpara obtener un historial de solo comando compatible con bash.
Matija Nalis
2

No es exactamente lo que estaba buscando, pero para importar de bash a zsh, puede usar este script 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);
});

Fuente

Elad
fuente
1

En respuesta a Elad, las personas pueden tener archivos .bash_history que tienen una línea adicional antes de cada comando que comienza con (#) y tiene los dígitos finales siguientes (123456789), por ejemplo: # 123456789. Si su archivo bash_history tiene estas líneas adicionales, use esta versión modificada del código de Elad para procesar un historial con formato zsh limpio para usar. Gracias Elad por el código de conversión rápido.

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