condividere o sincronizzare la cronologia tra Zsh e Bash


12

Mi trovo spesso a passare da Bash a Zsh e ad utilizzare la funzionalità di ricerca della cronologia per recuperare un comando.

Tuttavia, poiché Bash e Zsh hanno file cronologici diversi, trovo spesso che il comando che sto cercando sia stato eseguito nell'altra shell.

C'è un modo per condividere o sincronizzare la cronologia tra i due?


1
La sintassi di bash e zsh è abbastanza diversa da finire con molti comandi che non funzionano se copiati sull'altra shell.
Gilles 'SO- smetti di essere malvagio' il

Risposte:


10

Se si utilizzano le impostazioni predefinite per bash e zsh:

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

Ora hai lo stesso file per la cronologia in entrambe le shell.


2
Funziona davvero ?? I due histfile hanno formati completamente diversi!
Neil Traft,

1
Sì, entrambe le shell usano lo stesso formato. Un comando per riga.
Rufo El Magufo,

3
Il mio .zsh_history ha linee come : 1399608924:0;hg diffmentre il mio .bash_history ha semplicemente hg diff. Forse è perché sto usando oh-my-zsh?
Neil Traft,

Può essere. O qualche opzione di zsh. Non lo so.
Rufo El Magufo,

4
devi fare unsetopt EXTENDED_HISTORYper ottenere la cronologia solo dei comandi compatibile con bash.
Matija Nalis,

2

Non esattamente quello che stavi cercando, ma per importare da bash a zsh, puoi usare questo 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

In risposta a Elad, le persone potrebbero avere file .bash_history che hanno una riga aggiuntiva prima di ogni comando che inizia con (#) e che ha le cifre finali seguenti (123456789), ad esempio: # 123456789. Se il tuo file bash_history ha queste righe extra, usa questa versione modificata del codice di Elad per elaborare una cronologia in formato zsh pulita da usare. Grazie Elad per il codice di conversione rapido.

/*
 * 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);
});
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.