기록 명령에 잘못된 줄을 일으키는 타임스탬프 기록 파일

기록 명령에 잘못된 줄을 일으키는 타임스탬프 기록 파일

기록 파일로 내보내려면 .bash_profile 설정이 있습니다.

export HISTFILE=/root/history/.bash_hist-$(who -m | awk '{print $1}')

그런 다음 기록 명령에 대한 타임스탬프를 내보냅니다.

export HISTTIMEFORMAT="%Y/%m/%d %T "

이 조합으로 인해 에포크 타임스탬프가 기록 파일에 기록되었습니다.

#1463962023
top

그래서 나는 사람이 읽을 수 있는 타임 스탬프만 파일에 쓰기 위해 .bash_profile에 perl 하나의 라이너를 작성하여 에포크 라인을 제거했습니다: (및 몇 가지 다른 라인)

format_history () {
local file=/root/history/.bash_hist-$(who -m | awk '{print $1}')
perl -i -pe 's/^#(\d{10})$/"# ".localtime($1)/e' "$file"
}

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

이제 내보낸 파일은 다음과 같습니다.

# Sun May 22 19:06:41 2016
last

그것은 훌륭하고 정확히 내가 원하는 것입니다. 그러나 이는 필요하지 않은 날짜만 포함하는 전용 줄을 기록 명령에 추가하는 원치 않는 부작용이 있습니다.

 824  2016/05/22 19:07:33 # Sun May 22 19:06:41 2016
 825  2016/05/22 19:07:33 last

히스토리 명령이 원치 않는 행을 보고하지 않고 원하는 대로 파일에 쓸 수 있는 방법은 무엇입니까?

참고 - 시스템에 로그인하면 기록 명령을 사용하는 이 예외 사항이 "활성화"되는 것 같습니다. (저는 ssh를 사용합니다.) 세션에 있을 수 있고 10개의 명령을 실행한 다음 기록 명령을 실행하면 모든 것이 정상적으로 보입니다. 그러나 로그아웃했다가 다시 로그인하여 History 명령을 실행하면 잘못된 줄이 표시됩니다.

업데이트: 문제의 범위를 다음 줄로 좁혔습니다.

PROMPT_COMMAND="history -a;format_history;$PROMPT_COMMAND"

이 줄을 주석 처리하면 기록 명령이 예상대로 작동합니다. 그러나 이는 기록 파일의 서식을 실행하는 명령이기도 했습니다. 줄에서 "history -a" 부분을 제거하고 나머지는 그대로 두려고 했지만 별 차이가 없습니다. 전체 줄을 주석 처리한 상태로 두면 Perl 스크립트를 사용하여 파일의 서식을 어떻게 호출할 수 있습니까?

답변1

나는 기록 파일을 그대로 두고 대신 프롬프트_명령 처리기에서 명령 기록을 구현하겠습니다. 또한 개인 로그 파일에 기록하도록 하면 기록 파일의 다른 사용과 충돌이 발생하지 않거나 /root에 액세스하는 다른 사용자와 관련된 문제가 발생하지 않습니다.

관련 정보