обмін або синхронізація історії між Zsh і Bash


12

Я часто виявляю, що перемикаюся між Bash і Zsh і використовую функцію пошуку історії для відновлення команди.

Однак, оскільки Bash і Zsh мають різні файли історії, я часто виявляю, що команда, яку я шукаю, виконується в іншій оболонці.

Чи є спосіб поділитися чи синхронізувати історію між ними?


1
Синтаксис bash та zsh настільки відрізняється, що ви закінчите багато команд, які не працюють, скопійовані в іншу оболонку.
Жил "ТАК - перестань бути злим"

Відповіді:


10

Якщо ви використовуєте параметри за замовчуванням для bash та zsh:

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

Тепер у вас однаковий файл історії в обох оболонках.


2
Це справді працює ?? Дві історії мають абсолютно різні формати!
Ніл Трафт

1
Так, обидві оболонки використовують однаковий формат. Одна команда на рядок.
Руфо Ель Магуфо

3
Моя .zsh_history має такі рядки, як у : 1399608924:0;hg diffтой час як моя .bash_history має просто hg diff. Може, це тому, що я використовую о-мі-зш?
Ніл Трафт

Можливо. Або якийсь варіант zsh. Не знаю.
Руфо Ель Магуфо

4
вам потрібно зробити, unsetopt EXTENDED_HISTORYщоб отримати bash-сумісну історію лише команд.
Matija Nalis

2

Не зовсім те, що ви шукали, але для того, щоб імпортувати з bash в zsh, ви можете використовувати цей сценарій 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);
});

Джерело


1

У відповідь на Elad, люди можуть мати .bash_history файли, які мають додатковий рядок перед кожною командою, яка починається з (#) і має наступні цифри, наступні (123456789), наприклад: # 123456789. Якщо у вашому файлі bash_history є ці додаткові рядки, використовуйте цю змінену версію коду Elad для обробки чистої історії формату zsh для використання. Дякую Елад за швидкий код конверсії.

/*
 * 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);
});
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.