최신 쉘의 기록 기능을 경로 범위로 제한하는 방법이 있습니까?
내 작업 컨텍스트는 파일 시스템의 경로로 분할되며 쉘 활동 패턴(예: 반복적으로 실행되는 명령)은 각 "프로젝트"마다 다른 경향이 있습니다. 히스토리 기능의 범위를 현재 경로(또는 하위 경로)에서 실행된 명령으로 제한할 수 있다면 좋을 것입니다.
답변1
이는 간결한 답변은 아니지만 셸로 사용하는 경우 옵션이 있습니다 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
:
- 프로젝트 디렉토리로 이동됩니다
- 현재 기록이 저장됩니다 (
history -w
) - 그러면 메모리에 저장된 이력이 초기화됩니다(
history -c
). - 프로젝트 이력 파일은 으로 설정되어
/home/user/.a_history
읽혀집니다history -r
.
답변2
이를 통해 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
답변3
ZSH를 사용하는 경우 최근에 이 문제를 처리하기 위해 작성한 이 작은 플러그인을 살펴보세요.
https://github.com/ericfreese/zsh-cwd-history
HISTFILE
chpwd
명령을 실행하는 각 디렉토리에 대해 별도의 디렉토리를 저장하고 디렉토리를 변경할 때 s 사이를 전환하기 위한 후크를 추가합니다 .HISTFILE
HISTFILE
또한 원래의 "전역" 디렉토리 HISTFILE
와 HISTFILE
현재 작업 디렉토리 사이를 전환 하는 키 입력에 바인딩할 수 있는 zle 위젯을 제공합니다 .
원래는 이걸 기반으로 한건데Jim Hester의 디렉토리별 기록플러그인이지만 이후 플러그인의 많은 문제를 해결하기 위해 처음부터 다시 작성되었습니다.
답변4
필요한 작업을 수행하는 ZSH 플러그인을 작성했습니다. https://github.com/tymm/zsh-directory-history
다른 솔루션과 비교했을 때 내 플러그인은 자동으로 전역 기록으로 돌아갑니다. 즉, 디렉터리 기록과 전역 기록 간에 전환할 필요가 없습니다.
그러나 다른 솔루션이 더 가볍다고 생각합니다.