ज़श और बैश के बीच के इतिहास को साझा करना या सिंक्रनाइज़ करना


12

मैं अक्सर अपने आप को बैश और जेडश के बीच स्विच करता हूं, और कमांड को पुनर्प्राप्त करने के लिए इतिहास खोज कार्यक्षमता का उपयोग करता हूं।

हालाँकि, बाश और ज़श के पास अलग-अलग इतिहास की फाइलें हैं, इसलिए मुझे अक्सर लगता है कि मैं जिस कमांड को खोज रहा हूं उसे अन्य शेल में निष्पादित किया गया है।

क्या दोनों के बीच इतिहास को साझा करने या सिंक्रनाइज़ करने का कोई तरीका है?


1
बाश और zsh का वाक्यविन्यास काफी अलग है कि आप कई आदेशों के साथ समाप्त हो जाएंगे जो दूसरे शेल में कॉपी होने पर काम नहीं करते हैं।
गिल्स एसओ- बुराई को रोकना '

जवाबों:


10

यदि आप बैश और zsh के लिए चूक का उपयोग कर रहे हैं:

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

अब आपके पास दोनों गोले में इतिहास के लिए एक ही फाइल है।


2
क्या यह वास्तव में काम करता है ?? दो histfiles पूरी तरह से अलग प्रारूप है!
नील ट्राफट

1
हां, दोनों गोले एक ही प्रारूप का उपयोग करते हैं। प्रति पंक्ति एक कमांड।
रूफो एल मगूफो

3
मेरी .zsh_history की लाइनें हैं : 1399608924:0;hg diffजबकि मेरी .bash_history बस hg diff। शायद यह इसलिए है क्योंकि मैं ओह-माय-ज़श का उपयोग कर रहा हूं?
नील ट्राफट

शायद। या zsh का कोई विकल्प। मुझे नहीं पता।
रूफो एल मगूफो

4
आपको unsetopt EXTENDED_HISTORYबैश-संगत कमांड-ओनली हिस्ट्री प्राप्त करने के लिए करने की आवश्यकता है ।
मतिजा नलिस 22

2

बिलकुल नहीं जो आप ढूंढ रहे थे, लेकिन बैश से लेकर 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 फ़ाइल में ये अतिरिक्त लाइनें हैं, तो उपयोग करने के लिए स्वच्छ zsh स्वरूपित इतिहास को संसाधित करने के लिए Elad के कोड के इस संशोधित संस्करण का उपयोग करें। त्वरित रूपांतरण कोड के लिए धन्यवाद 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);
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.