Zsh와 Bash 간의 기록 공유 또는 동기화

Zsh와 Bash 간의 기록 공유 또는 동기화

나는 종종 Bash와 Zsh 사이를 전환하고 기록 검색 기능을 사용하여 명령을 복구하는 것을 발견합니다.

하지만 Bash와 Zsh는 서로 다른 히스토리 파일을 가지고 있기 때문에 내가 찾고 있는 명령이 이미 다른 쉘에서 실행되고 있는 경우가 종종 있습니다.

둘 사이에 기록을 공유하거나 동기화할 수 있는 방법이 있나요?

답변1

Bash 및 zsh에 기본값을 사용하는 경우:

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

이제 두 셸 모두에 동일한 기록 파일이 있습니다.

답변2

Elad에 대한 응답으로 사람들은 (#)로 시작하고 그 뒤에 숫자(123456789)가 오는 각 명령 앞에 추가 줄이 있는 .bash_history 파일을 가질 수 있습니다(예: #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);
});

답변3

정확히 원하는 것은 아니지만 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);
});

원천

답변4

Bash와 zsh는 공유 가능$HISTFILE

에서 bash를 zsh입력합니다 bash. 현재 설정에서 bash는 + (return ) Ctrl를 누른 후에만 기록을 저장합니다.Dzsh

bash와 zsh의 구문은 너무 다르기 때문에 다른 셸에 복사하면 작동하지 않는 많은 명령이 생성됩니다.

나에게는 대부분의 명령이 작동하지만 타임스탬프에 주의해야 합니다. +를 누르면
echo '14:56'작성된 시간은 .zsh_history2022-01-11 14:57입니다.CtrlD

Pass peco, 기록을 얻습니다.

^*_*^  > \d{4}-\d{2}-\d{2}\s\d{2}:\d{2}\s{2}                                                                     Regexp [1987 (1/67)]
2022-01-11 14:57  e .zsh_history
2022-01-11 14:55  bash
2022-01-11 14:57  echo '14:56'
2022-01-11 14:57  echo  $HISTFILE
2022-01-11 14:57  print  $HISTFILE
2022-01-11 14:57  print -l $HISTFILE
2022-01-11 14:57  e .zsh_history
2022-01-11 14:57  ls
2022-01-11 14:55  history -i -n 1 | le
2022-01-11 14:55  ~
2022-01-11 14:55  -

내부에.zsh_history

: 1641884226:0;ls
: 1641884234:17;e .zsh_history
print -l $HISTFILE
print  $HISTFILE
echo  $HISTFILE
echo '14:56'
: 1641884154:100;bash
: 1641884257:9;e .zsh_history
: 1641884338:0;e .zsh_history
: 1641880817:3534;e history_config_wf.zsh
: 1641884353:0;~

내 설정 peco( .zshrc):

BUFFER=$(history -i -2000 | eval $tac | cut -c 8- | peco --initial-filter="Regexp" --query "\\d{4}-\\d{2}-\\d{2}\\s\\d{2}:\\d{2}\\s{2} $BUFFER") 

관련 정보