추가 정보

추가 정보

여기 이상한 것이 있습니다. 저는 bash 기록에 액세스해야 하는 프로그램을 작성 중입니다. 나는 구문 분석을 보았습니다 .bash_history( .bash_eternal_history또는내 구성history) 파일을 찾았지만 이미 내장된 기능을 통해 무거운 작업이 수행되었음을 깨달았습니다 .

내 기록 파일의 일부 내용이 아래에 표시됩니다. 직접 구문 분석할 수도 있지만 history이미 엣지 케이스 여러 줄 명령, 타임스탬프, histfile 형식을 처리하고 여러 플랫폼에서 작동하므로 표준화된 구문 분석기 에 의존하는 것을 선호합니다 .

#1587920724
echo test
#1587920725
echo test2
#1587920729
touch file
#1587920731
rm file
#1587920732
history

명령을 입력하면 history다음과 같은 멋진 타임스탬프 기록 목록이 표시됩니다.

 5083  [2020-04-26 18:05:24] echo test
 5084  [2020-04-26 18:05:25] echo test2
 5085  [2020-04-26 18:05:29] touch file
 5086  [2020-04-26 18:05:31] rm file
 5087  [2020-04-26 18:05:32] history

history셸 내장 명령이므로 프로그램의 bash 명령 문자열을 통해 실행해야 합니다 . 그러나 명령을 실행할 때 bash -ic 'history -r; history'다음 메시지가 나타납니다.

10159  [2020-04-26 18:08:35] #1587920724
10160  [2020-04-26 18:08:35] echo test
10161  [2020-04-26 18:08:35] #1587920725
10162  [2020-04-26 18:08:35] echo test2
10163  [2020-04-26 18:08:35] #1587920729
10164  [2020-04-26 18:08:35] touch file
10165  [2020-04-26 18:08:35] #1587920731
10166  [2020-04-26 18:08:35] rm file
10167  [2020-04-26 18:08:35] #1587920732
10168  [2020-04-26 18:08:35] history

주석의 타임스탬프는 명령과 마찬가지로 인쇄되며 모든 항목에는 동일한 타임스탬프(명령을 실행한 시간)가 있습니다.

이상하게도 Linux에서는 bash -ic 'history -r; history'정확히 동일한 출력이 history일반 형식과 올바른 타임스탬프를 사용하여 생성됩니다. 이는 정확히 제가 예상했던 것과 같습니다.

나는 알고 싶다고 생각한다:

  1. 이 두 명령의 출력이 MacOS에서는 다르지만 Linux에서는 동일한 이유는 무엇입니까?
  2. 명령 문자열에서 올바른 출력을 얻으려면 어떻게 해야 합니까? (Python 스크립트에서 명령을 실행하고 있습니다)
  3. 내가 잘못된 방향으로 가고 있는 걸까? 나의 초기 목표는 ( history > history.txt && ./script.py또는 같은 외부 작업을 수행할 필요 없이) Python 프로그램에서 완전한 타임스탬프가 있는 bash 기록을 얻는 것이었습니다 history | ./script.py.

감사해요:)

추가 정보

답변1

이 문제를 확인할 수 있습니다.

예, bash 버전 3.2.57 이하에는 기록 파일의 타임스탬프를 인식하지 못하기 때문에 문제가 있는 것 같습니다. bash 변경 파일에서 특정 변경 사항을 찾을 수 없습니다. Bash를 최신 버전(4+)으로 업그레이드해야 할 수도 있습니다.

관련 정보