Zsh와 Bash 간의 히스토리 공유 또는 동기화


12

Bash와 Zsh를 전환하고 기록 검색 기능을 사용하여 명령을 복구하는 경우가 종종 있습니다.

그러나 Bash와 Zsh에는 다른 기록 파일이 있기 때문에 검색하려는 명령이 다른 셸에서 실행 된 경우가 종종 있습니다.

둘 사이에서 히스토리를 공유하거나 동기화 할 수있는 방법이 있습니까?


1
bash와 zsh의 구문은 다른 쉘로 복사 할 때 작동하지 않는 많은 명령으로 끝날만큼 충분히 다릅니다.
Gilles 'SO- 악마 그만'

답변:


10

bash 및 zsh의 기본값을 사용하는 경우 :

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

이제 두 쉘 모두에서 동일한 히스토리 파일이 있습니다.


2
이것이 실제로 작동합니까? 두 개의 histfile은 형식이 완전히 다릅니다!
닐 트래 프트

1
예, 두 쉘 모두 같은 형식을 사용합니다. 라인 당 하나의 명령.
Rufo El Magufo

3
내 .zsh_history 같은 라인이 : 1399608924:0;hg diff내 .bash_history 파일은 단순히 가지고 반면를 hg diff. 어쩌면 내가 oh-my-zsh를 사용하고 있기 때문일까요?
닐 트래 프트

아마도. 또는 zsh의 일부 옵션. 모르겠어요
Rufo El Magufo

4
당신은 할 필요가 unsetopt EXTENDED_HISTORYbash는 호환 명령 만 역사를 얻을 수 있습니다.
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에 대한 응답으로, 각 명령 앞에 (#)로 시작하고 (123456789) 다음에 후행 숫자가있는 .bash_history 파일이있을 수 있습니다 (예 : # 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);
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.