작업 디렉토리 당 기록 유지 (쉘 세션 당 참조)


11

현대 쉘의 히스토리 기능을 경로로 만들 수있는 방법이 있습니까?

내 작업 컨텍스트는 파일 시스템의 경로로 나뉘어져 있으며 반복적으로 실행되는 명령과 같은 셸 활동 패턴은 각 '프로젝트'마다 고유 한 경향이 있습니다. 히스토리 기능을 현재 경로 (또는 하위 경로)에서 실행 된 명령으로 범위를 지정할 수 있다면 좋을 것입니다.

답변:


5

을 사용 zsh하면 다음을 수행 할 수 있습니다.

mkdir -p ~/.zsh/dirhist

~ / .zshrc에 추가하십시오.

HISTSIZE=1000
SAVEHIST=10000
setopt HIST_SAVE_NO_DUPS INC_APPEND_HISTORY
HISTFILE=~/.zsh/dirhist/${PWD//\//@}
chpwd() {
  [[ $PWD = $OLDPWD ]] || fc -Pp ~/.zsh/dirhist/${PWD//\//@}
}

chpwd()현재 디렉토리가 변경 될 때마다 호출됩니다. 거기에서 우리는 ~/.zsh/dirhist/@foo@bar당신 cd이 할 때 와 같은 기록 파일을 재설정합니다 /foo/bar.


쉘 사용 습관을 바꿀 필요가 없기 때문에이 접근법이 마음에 듭니다. 테스트 며칠 만에 잘되는 것처럼 보입니다.
sohocoke 2016 년

10

깔끔한 대답은 아니지만 bash쉘로 사용하는 경우 대안 .bashrc입니다.에 별명을 만들 수 있습니다 .

예를 들어 :

alias a='cd /tmp/A ; history -w ; history -c ; export HISTFILE=/home/user/.a_history ; history -r $HISTFILE'
alias b='cd /tmp/B ; history -w ; history -c ; export HISTFILE=/home/user/.b_history ; history -r $HISTFILE'

그런 다음 입력하면 a:

  1. 당신은 프로젝트 디렉토리로 이동합니다
  2. 현재 기록이 저장됩니다 ( history -w)
  3. 메모리에 저장된 기록이 재설정됩니다 ( history -c)
  4. 프로젝트 히스토리 파일이 /home/user/.a_history( history -r) 로 설정 되고 읽 힙니다.

내 질문에 소원 / 요구 사항이 생략되어 세부 사항이 누락되어 죄송합니다. 즉, 별명 / 함수를 사용하는 것을 잊지 않아도됩니다. 즉, 범위 지정은 일반적으로 쉘과 상호 작용하는 방식에 대한 추가 기능으로 작동해야합니다.
sohocoke 2016 년

내 보내지 마십시오 HISTFILE. 다른 프로그램으로 내보낼 이유가 없으며 ~ / .bashrc는 모든 대화 형 bash 프로세스마다 실행되므로 설정을위한 코드는 모든 bash에서 실행됩니다. 일반적으로 쉘 정의 변수가 기본적으로 내보내지지 않으면 거의 내 보내지 않아야합니다.
Chris 페이지

1

ZSH를 사용하는 경우 최근에 이것을 처리하기 위해 작성한이 작은 플러그인을 살펴보십시오.

https://github.com/ericfreese/zsh-cwd-history

HISTFILE명령을 실행 한 모든 디렉토리에 대해 별도의 정보 를 저장하고 디렉토리 를 변경할 때 s chpwd를 전환하기 위한 후크를 추가합니다 HISTFILE.

또한 HISTFILE원래 "전역" HISTFILEHISTFILE현재 작업 디렉토리 사이 를 전환하는 키 누르기에 바인딩 할 수있는 zle 위젯을 제공합니다 .

원래 Jim Hester의 디렉토리 별 히스토리 플러그인을 기반으로 했지만 그 플러그인의 많은 문제를 해결하기 위해 처음부터 다시 작성되었습니다.


링크 만 답변을 사용하지 않는 것이 좋습니다. 작동 방식 / 작동 방식에 대한 설명을 추가하십시오.

0

나는 당신이 원하는 것을하는 ZSH 플러그인을 작성했습니다 : https://github.com/tymm/zsh-directory-history

다른 솔루션과 달리 내 플러그인은 자동으로 전역 기록으로 돌아갑니다. 즉, 디렉토리 기록과 전역 기록간에 전환 할 필요가 없습니다.

그러나 다른 솔루션은 조금 더 가볍습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.