compartilhando ou sincronizando histórico entre Zsh e Bash


12

Costumo me alternar entre Bash e Zsh e usar a funcionalidade de pesquisa de histórico para recuperar um comando.

No entanto, como o Bash e o Zsh têm arquivos de histórico diferentes, geralmente acho que o comando que estou procurando foi executado no outro shell.

Existe alguma maneira de compartilhar ou sincronizar o histórico entre os dois?


1
A sintaxe do bash e do zsh é diferente o suficiente para que você acabe com muitos comandos que não funcionam quando copiados para o outro shell.
Gilles 'SO- stop be evil'

Respostas:


10

Se você estiver usando os padrões para bash e zsh:

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

Agora você tem o mesmo arquivo para o histórico nos dois shells.


2
Isso realmente funciona? Os dois arquivos de histórico têm formatos completamente diferentes!
Neil Traft

1
Sim, as duas conchas usam o mesmo formato. Um comando por linha.
Rufo El Magufo 13/07/2014

3
Meu .zsh_history tem linhas como : 1399608924:0;hg diffenquanto meu .bash_history tem simplesmente hg diff. Talvez seja porque eu estou usando oh-my-zsh?
Neil Traft

Talvez. Ou alguma opção do zsh. Eu não sei.
Rufo El Magufo

4
você precisa fazer unsetopt EXTENDED_HISTORYpara obter o histórico somente de comandos compatível com o bash.
Matija Nalis 02/02

2

Não é exatamente o que você estava procurando, mas para importar do bash para o zsh, você pode 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);
});

Fonte


1

Em resposta ao Elad, as pessoas podem ter arquivos .bash_history que possuem uma linha extra antes de cada comando que começa com (#) e possui dígitos à direita (123456789), por exemplo: # 123456789 Se o seu arquivo bash_history tiver essas linhas extras, use esta versão modificada do código do Elad para processar um histórico zsh limpo e formatado para usar. Obrigado Elad pelo código de conversão rápida.

/*
 * 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);
});
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.