Bash의 각 작업 디렉터리에 대한 기록 로그 생성

Bash의 각 작업 디렉터리에 대한 기록 로그 생성

각 현재 작업 디렉터리의 기록을 포함하는 파일을 유지하는 것이 가능한지 궁금합니다. 예를 들어 작업 중 /user/temp/1/일부 명령을 입력 하면 /user/temp/1/.his해당 명령이 어디에 저장됩니까? 나는 배쉬를 사용하고 있습니다.

답변1

중요한: 지적한 대로자일스 "그럼 악한 짓은 그만둬". 다음 방법을 사용하면 셸이 공격에 노출되어 실수로 정보가 유출될 수 있습니다. 조심해서 진행해라.


제공된 답변을 바탕으로 구축그로겔, ~/.bash_profile에서 대체 CD(ch)를 생성할 수 있습니다.

function ch () {
    cd "$@"
    export HISTFILE="$(pwd)/.bash_history"
}

ch가 호출될 때마다 새로운 HISTFILE 값이 자동으로 파생됩니다.

Bash의 기본 동작은 터미널 세션을 종료할 때만 기록을 업데이트하므로 이것만으로도 세션을 종료한 폴더의 .bash_history 파일에 기록이 저장됩니다. 해결책이 언급되어 있습니다.이 게시물그리고 자세하게 소개된이 페이지, HISTFILE을 실시간으로 업데이트할 수 있습니다.

완전한 솔루션은 ~/.bash_profile에 두 줄을 더 추가하는 것으로 구성됩니다.

shopt -s histappend
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"

첫 번째 줄을 추가하도록 기록 모드를 변경한 다음 모든 프롬프트에서 실행되도록 기록 명령을 구성합니다.

답변2

디렉터리를 변경할 때 실행할 코드를 설정할 수 있습니다. zsh에서는 chpwd_functions함수를 정의하고 이를 배열에 추가하는 것만큼 간단합니다. Bash에서는 더 많은 작업이 필요하지만 그렇게 할 수 있습니다.디렉토리에 들어갈 때 bash 스크립트 실행chpwd디렉터리가 변경될 때마다 실행되는 함수를 정의하는 방법을 알아보세요 .

수행하려는 작업을 수행하려면 해당 chpwd기능이 필요합니다.현재 역사를 쓰다오래된 파일에. Bash를 종료할 때 올바른 위치에 기록을 저장하려면 다음을 설정하십시오.HISTFILE새 디렉터리의 내역 파일에 대한 변수를 지정하고 새 내역 레코드를 읽습니다.

chpwd () {
  history -a
  mkdir -p "$HOME/.bash_history.d/${PWD%/*}"
  HISTFILE=~/.bash_history.d/$PWD
  history -r
}

현재 디렉터리가 아닌 홈 디렉터리 아래의 계층 구조에 기록을 쓰고 있다는 점에 유의하세요.현재 디렉토리에 쉘 기록을 쓰는 것은 매우 위험하고 파괴적입니다.: 어디에서나 개인 정보가 유출되고, 의도하지 않은 파일을 수정할 위험이 있습니다(기록 파일 이름이 다른 곳을 가리키는 기존 심볼릭 링크라면 어떻게 될까요?).

각 명령 후에 기록을 기록하는 것이 더 나을 수도 있습니다. Bash에서는 다음을 사용하여 이 기능을 활성화할 수 있습니다.histappend옵션. 이 옵션을 사용하면 history -a명시적으로 실행할 필요가 없습니다 .

shopt -s histappend
chpwd () {
  mkdir -p "$HOME/.bash_history.d/${PWD%/*}"
  HISTFILE=~/.bash_history.d/$PWD
  history -r
}

답변3

디렉토리를 얼마나 자주 변경하는지에 따라 내 솔루션이 작동하지 않을 수 있습니다. Bash 기록이 저장되는 위치를 설정하는 HISTFILE을 내보낼 수 있으므로 작업 중인 디렉터리에 별도의 구성 파일을 만든 다음 direnv와 같은 것을 사용하여 자동으로 로드할 수 있습니다.

HISTFILE="$(pwd).bash_history"

데렌후 https://github.com/direnv/direnv

관련 정보