Mac에서 터미널 세션간에 Bash 기록이 유지되지 않음


33

내 배쉬 역사는 신비스럽게 작동을 멈추었고 어떻게 고칠 지 모른다. 이것은 내 .bashrc의 모습입니다.

HISTSIZE=500
HISTFILESIZE=500
HISTFILE=$HOME/.bash_history

그러나 내가 실행 echo $HISTFILE하면 인쇄됩니다 /Users/myusername/.bash_sessions/EE8689E5-7DAD-4018-817E-0AF1DE36082A.historynew.

.bash_history 파일의 소유자이므로이 문제를 어떻게 해결할지 잘 모르겠습니다.

감사!


안녕하세요 Nelson, 슈퍼 유저에 오신 것을 환영합니다. 삽입 한 공간을 빨리 확인합니까?
bertieb

예, 그들은 제거하고 다시보고합니다.

@ bertieb, 공백을 제거했으며 이제 $ HISTFILESIZE가 올바르게 에코됩니다. 그러나 히스토리는 저장되지 않은 상태로 유지되며 $ HISTFILE은 홀수 임시 히스토리 파일을 인쇄합니다 (이 세션의 스토어 히스토리를 가정합니다).

$HISTFILE관심 없이 변경하려고 하십니까? .bashrcOSX를 사용 하지 않고 echo $HISTFILE예상되는 위치를보고합니다. 문제의 행을 주석 처리해도 영향이 있습니까?
bertieb

1
경로 이름 변수 확장은 항상 인용하십시오 HISTFILE="$HOME/.bash_history”. 따옴표가 없으면 홈 디렉토리 경로에 공백 (또는 다른 특수 문자)이 포함 된 경우 버전이 유효하지 않은 것입니다.
Chris 페이지

답변:


26

터미널은 각 터미널 세션에 고유 식별자를 할당하고 TERM_SESSION_ID 환경 변수를 통해이를 전달하여 터미널에서 실행중인 프로그램이 재시작을 사용하여 터미널을 종료하고 재시작 할 때 응용 프로그램 특정 상태를 저장 / 복원 할 수 있도록합니다.

세션마다 고유 한 HISTFILE 및 .session 파일을 저장하는 데 새 폴더 (~ / .bash_sessions /)가 사용됩니다.

셸 시작 중에 세션 파일이 실행됩니다. 오래된 파일은 주기적으로 삭제됩니다.

기본 동작은 복원 된 각 터미널 세션에 대해 bash 명령 기록을 독립적으로 저장하고 복원합니다. 또한 새 세션에 대한 명령을 글로벌 히스토리로 병합합니다.

설정을 통해이 동작을 비활성화하고 단일 히스토리를 공유 할 수 있습니다

export SHELL_SESSION_HISTORY=0

HISTTIMEFORMAT이 정의되면 세션 별 히스토리가 기본적으로 사용 불가능합니다 (/ private / etc / bashrc_Apple_Terminal에서 자세히 알아보십시오)

다음 파일이 존재하면 저장 / 복원 메커니즘이 비활성화됩니다.

~/.bash_sessions_disable

엘 캐피 탄 출시 이후 애플은 이미 몇 가지 행동을 바 꾸었으므로 여기에 대해 더 자세히 읽는 것이 좋습니다. less /private/etc/bashrc_Apple_Terminal


3
그러나 저장 / 복원 메커니즘을 비활성화하여 시작하지 마십시오. 셸 명령 기록에 문제가있는 경우 해당 문제를 해결하십시오. 이 ~/.bash_sessions_disable파일은 구체적으로 해결할 수없는 문제가있는 경우 최후의 수단으로 사용됩니다. 세션 별 명령 기록 이상을 비활성화하고 세션 별 명령 기록 만 비활성화 할 수 있습니다. 자세한 내용은 의견 /etc/bashrc_Apple_Terminal을 참조하십시오.
Chris 페이지

1
@ChrisPage 실제로 Apple은 약간의 스크립트를 변경했습니다. 답변을 업데이트했습니다. 감사합니다.
diimdeep

@diimdeep이 줄을 어디에 추가 하시겠습니까? export SHELL_SESSION_HISTORY=0
zerohedge

@zerohedge .bashrc.bash_profile unix.stackexchange.com/a/310150/15362
diimdeep

@diimdeep 감사합니다. 이것은 지금 작동하는 것 같습니다. 파급 효과가 있습니까?
zerohedge

6

El Capitan 업그레이드 후 비슷한 것을 발견했습니다. .bash_sessions_disable홈 디렉토리에 파일 파일을 추가하면 새 bash 세션이 비활성화되고 .bash_history다시 사용됩니다.

Reddit 스레드 에는 더 많은 정보와 추가 링크가 있습니다.


그러나 저장 / 복원 메커니즘을 비활성화하여 시작하지 마십시오. 셸 명령 기록에 문제가있는 경우 해당 문제를 해결하십시오. 이 ~/.bash_sessions_disable파일은 구체적으로 해결할 수없는 문제가있는 경우 최후의 수단으로 사용됩니다. 세션 별 명령 기록 이상을 비활성화하고 세션 별 명령 기록 만 비활성화 할 수 있습니다. 자세한 내용은 의견 /etc/bashrc_Apple_Terminal을 참조하십시오.
Chris 페이지

고마워 크리스-내 역사를 비활성화시키는 다른 것들이 지난 몇 달 동안 예상대로 작동했습니다 (이전 osx 버전과 동일하고 Linux와 동일). 그들이 왜 바뀌 었는지 모르십니까?
rabs

@rabs SHELL_SESSION_HISTORY=0의 상단에 추가하는 것이 좋습니다 ~/.bash_profile.
Teejay


3

Reddit 스레드 의이 답변은 저를 구했습니다.

bash_sessions가 실행되는 종료 "후크"를 막는 것은 아마도 RVM 일 것입니다. .bash_profile에서 다음 줄을 주석 처리하면 작동합니다.

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

실제로 도움이되었습니다!
Karsten

1

Mac이라면 기본 로그인 쉘이고 대신 대신 bash실행 .profile됩니다 .bashrc. 따라서 잘못된 파일을 편집하고있었습니다.


.profile을 편집하여 내 .bashrc와 동일하며 기록이 여전히 나타나지 않습니다.

@NelsonLiu $HISTFILE다른 부분에서 에코 를 하면 어떻게됩니까 profile? 변수를 변경하는 다른 스크립트를 제공 할 수 있습니까? 나는 모두를 확인 Terminal하고 iTerm, bash 3그리고 4 모두가 기본이 $HOME/.bash_history.
theoden

프로필의 다른 부분에서 $ HISTFILE을 어떻게 에코합니까?

@NelsonLiu, 분명하지 않습니까? 목표는 언제 $HISTFILE변경 되는지 추적하는 것입니다 . 따라서 단순히 두 개의 echo $HISTFILE코드를 둘러싸십시오. 당신이해야 할 일은 무언가가 드러날 때까지 $HISTFILEecho $HISTFILE줄을 서로 더 가깝고 더 가깝게 이동 하여 변경되는 코드 조각을 찾는 것입니다. 그게 다야.
theoden

1
그래서 당신이 지시하고 .bash_profile을 프로파일과 동일하게 만들었습니다. 나는 echo $HISTFILE차이점이 있는지 확인 하기 위해 모든 라인을 결정했습니다 . 그러나 그것은 단지 /Users/username/.bash_history수많은 시간을 인쇄 했습니다. 그런 다음 echo $HISTFILE쉘에서 실행 하여 출력했습니다 /Users/nelsonliu/.bash_sessions/CD275A29-1DF1-4ED8-B8CE-F706B11B812F.historynew.

0

High Sierra에서이 문제를보고있었습니다. 어쨌든 내 자신의 .bash_history는 루트가 소유하고 다른 사용자에 대한 읽기 권한이 없었습니다 (ls -al로 홈 디렉토리의 내용을 볼 때)

이 .bash_history 파일에는 아무런 영향이 없으므로 sudo rm .bash_history에 이어 .bash_history를 터치하여 새 파일을 만들었습니다.

이제는 모두 잘 보인다


나에게 그것은 파일 권한이 아니며 HIST 제어 변수를 정의하지 않았기 때문입니다. 분명히 하나 이상을 정의해야합니다. 나는 이것을 내 ~/.bash_profile파일에 추가했다 :export HISTTIMEFORMAT='%F %T '
MarkHu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.