얽힌 역사


15

GUI 모드에서 사용자가 둘 이상의 터미널을 열었을 때 터미널은 어떻게 해당 사용자의 히스토리 파일을 다시 작성합니까? 내가 묻는 이유는 각 터미널에서 사용자가 다른 명령을 실행하게 될 가능성이 있기 때문입니다. 기록 파일은 모든 터미널에서 명령을 저장하거나 첫 번째 터미널에서만 명령을 저장합니까? 아니면이 상황을 해결하기 위해 사용되는 다른 종류의 계획이 있습니까?

답변:


11

쉘이 어떻게 처리하기로 선택했는지에 달려 있습니다.

bash기본적으로 히스토리 파일이 종료 될 때마다 각 쉘의 로컬 히스토리로 히스토리 파일을 겹쳐 쓰므로 종료 할 마지막 쉘이 우선합니다. 이 histappend옵션을 사용하면 대신 마스터 기록에 추가됩니다 ( shopt -s histappend).

zsh 기본적으로 동일하게 처리 할 수있는 몇 가지 옵션이 있습니다.

  • appendhistory -셸이 종료되면 각 셸의 기록이 마스터 기록 파일에 추가됩니다.
  • incappendhistory -마스터 히스토리 파일은 쉘이 종료 될 때까지 기다리지 않고 임의의 쉘에서 라인이 실행될 때마다 업데이트됩니다.
  • sharehistory-과 마찬가지로 incappendhistory마스터 히스토리 파일에서 실행중인 모든 쉘로 변경 사항을 가져 오므로 한 쉘에서 명령을 실행 한 후 Up다른 쉘에서 적중 하여 볼 수 있습니다.

Bash에서 그 작업을 수행하는 방법을 알려주십시오.;)
tante

1
@tante shopt -s histappend작동하지 않습니까?
Michael Mrozek

0

나는 원래 O'Reilly "Unix Power Tools"책에서이 아이디어를 얻었습니다.

.profile설정 :

export HISTFILE=$HOME/.sh_hist.$$

.profile읽을 때마다 내 세션의 PID로 명명 된 새 기록 파일을 얻습니다. 로그인이 여러 개인 경우 각 로그인마다 고유 한 내역 파일이 표시됩니다. 에서 작동 ksh하고 bash.

X 세션에서 새 터미널을 여는 경우 일반적으로 로그인 쉘은 아니지만 로그인 쉘로 작동하도록 터미널을 구성 할 수 있습니다. 예를 들어, 로그인 쉘로 rxvt +ls시작 rxvt합니다. 사용중인 터미널에 대한 문서를 확인하십시오.

또한 정리하기 위해 .logout또는 .bash_logout파일 (또는 다른 수단)을 사용하지 않는 한 결국에는 .sh_hist파일 이 많이 낭비 됩니다.


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