프로그래밍 방식으로 Bash 기록에 항목을 추가하고 타임스탬프가 작동하도록 하려면 어떻게 해야 합니까?

프로그래밍 방식으로 Bash 기록에 항목을 추가하고 타임스탬프가 작동하도록 하려면 어떻게 해야 합니까?

CentOS 6.2 및 Bash 4.1.2(1)에서 다음을 포함하는 파일을 추가했습니다 /etc/profile.d.

HISTTIMEFORMAT='%c : '
history -s "# some text as a marker"

이는 변수가 설정되어 있고 태그가 사용자의 기록 목록에 기록되어 있는 한(그리고 ~/.bash_history기록되어 있는 경우 exit) 작동합니다.

문제는 다음과 같습니다

  • history -s마커 추가 시 타임스탬프를 추가하지 마세요.
  • 뒤로 스크롤 기록이 표시에서 중지됩니다( ~/.bash_history파일을 메모리로 읽지 않음).
  • 댓글을 표시하는 기록 항목에는 (누락된) 타임스탬프 대신 "??"가 있습니다.

나는 다음을 추가해 보았습니다:

history -s "#$(date +%s)"

다른 history -s명령 앞에 있지만 Bash는 이를 동일한 형식임에도 불구하고 타임스탬프가 아닌 기록의 명령으로 처리합니다.

또 다른 옵션은 마커와 타임스탬프를 세션에 직접 첨부하는 것입니다 ~/.bash_history. 하지만 나중에 추가하면 세션 기록의 활동과 연속되지 않습니다. 다른 사용자 또는 단일 사용자의 여러 세션으로 인해 태그와 관련 세션 사이에 추가 세션이 추가될 수 있습니다.

이러한 문제를 해결할 수 있는 방법이 있나요?

고쳐 쓰다:

set -o history해당 줄을 추가(및 제거 ) 해 보았고 history -s "#$(date +%s)"위에서 언급한 기록 스크롤 문제를 해결한 것처럼 보였지만 누락된 타임스탬프는 여전히 문제입니다.

답변1

나는이 질문을 게시했습니다.bash 메일링 리스트 도움말그리고 관리자인 Chet Ramey로부터 답변을 받았습니다.불다.

그는 명령 앞에 다음 중 하나를 추가할 것을 권장합니다 history -s.

set -H    # aka set -o histexpand

또는

histchars='!^#'

나는 그들 모두를 시도했고 모두 작동했습니다. 그 이유는 #프로필 코드 실행시 기본 내역 댓글 문자가 설정되어 있지 않아 null( \0)이기 때문입니다.

이것은 내 작업 파일입니다.

HISTTIMEFORMAT='%c : '
histchars='!^#'
set -o history
history -s "# some text as a marker"

관련 정보