chia sẻ hoặc đồng bộ hóa lịch sử giữa Zsh và Bash


12

Tôi thường thấy mình chuyển đổi giữa Bash và Zsh và sử dụng chức năng tìm kiếm lịch sử để khôi phục lệnh.

Tuy nhiên, vì Bash và Zsh có các tệp lịch sử khác nhau, tôi thường thấy rằng lệnh tôi đang tìm kiếm đã được thực thi trong trình bao khác.

Có cách nào để chia sẻ hoặc đồng bộ hóa lịch sử giữa hai người không?


1
Cú pháp của bash và zsh đủ khác nhau để bạn kết thúc với nhiều lệnh không hoạt động khi được sao chép sang shell khác.
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


10

Nếu bạn đang sử dụng mặc định cho bash và zsh:

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

Bây giờ bạn có cùng một tệp cho lịch sử trong cả hai shell.


2
Điều này thực sự làm việc ?? Hai histfiles có định dạng hoàn toàn khác nhau!
Neil Traft

1
Có, cả hai vỏ sử dụng cùng một định dạng. Một lệnh trên mỗi dòng.
Rufo El Magufo

3
.Sshsh_history của tôi có các dòng như : 1399608924:0;hg difftrong khi .bash_history của tôi chỉ đơn giản hg diff. Có lẽ vì tôi đang sử dụng oh-my-zsh?
Neil Traft

Có lẽ. Hoặc một số tùy chọn của zsh. Tôi không biết.
Rufo El Magufo

4
bạn cần làm unsetopt EXTENDED_HISTORYđể có được lịch sử chỉ có lệnh tương thích bash.
Matija Nalis

2

Không chính xác những gì bạn đang tìm kiếm, nhưng để nhập từ bash sang zsh, bạn có thể sử dụng tập lệnh node.js này:

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

Nguồn


1

Để đáp ứng với Elad, mọi người có thể có các tệp .bash_history có thêm một dòng trước mỗi lệnh bắt đầu bằng (#) và có các chữ số theo sau (123456789), ví dụ: # 123456789. Nếu tệp bash_history của bạn có các dòng bổ sung này, hãy sử dụng phiên bản mã Elad đã sửa đổi này để xử lý lịch sử được định dạng zsh sạch để sử dụng. Cảm ơn Elad cho mã chuyển đổi nhanh chóng.

/*
 * 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);
});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.