การแชร์หรือซิงโครไนซ์ประวัติระหว่าง Zsh และ Bash


12

ฉันมักจะพบว่าตัวเองสลับระหว่าง Bash และ Zsh และใช้ฟังก์ชันการค้นหาประวัติเพื่อกู้คืนคำสั่ง

อย่างไรก็ตามเนื่องจาก Bash และ Zsh มีไฟล์ประวัติที่แตกต่างกันฉันมักจะพบว่าคำสั่งที่ฉันค้นหาถูกเรียกใช้งานในเชลล์อื่น

มีวิธีการแบ่งปันหรือซิงโครไนซ์ประวัติระหว่างทั้งสองหรือไม่


1
ไวยากรณ์ของ bash และ zsh นั้นแตกต่างกันมากพอที่คุณจะพบกับคำสั่งมากมายที่ไม่ทำงานเมื่อคัดลอกไปยังเชลล์อื่น
Gilles 'หยุดความชั่วร้าย'

คำตอบ:


10

หากคุณใช้ค่าเริ่มต้นสำหรับ bash และ zsh:

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

ตอนนี้คุณมีไฟล์เดียวกันสำหรับประวัติในทั้งสองเชลล์


2
มันใช้งานได้จริงเหรอ? ฮิสไฟล์สองไฟล์มีรูปแบบที่แตกต่างกันโดยสิ้นเชิง!
Neil Traft

1
ใช่ทั้งสองเชลล์ใช้รูปแบบเดียวกัน หนึ่งคำสั่งต่อบรรทัด
Rufo El Magufo

3
.zsh_history ของฉันมีสายเช่น: 1399608924:0;hg diffขณะ .bash_history hg diffของฉันมีเพียงแค่ อาจเป็นเพราะฉันใช้ oh-my-zsh?
Neil Traft

อาจจะ. หรือตัวเลือกของ zsh ฉันไม่รู้
Rufo El Magufo

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 ใหม่ทั้งหมดเพื่อใช้ ขอขอบคุณ Elad สำหรับรหัสการแปลงที่รวดเร็ว

/*
 * 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);
});
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.