여기 이상한 것이 있습니다. 저는 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
일반 형식과 올바른 타임스탬프를 사용하여 생성됩니다. 이는 정확히 제가 예상했던 것과 같습니다.
나는 알고 싶다고 생각한다:
- 이 두 명령의 출력이 MacOS에서는 다르지만 Linux에서는 동일한 이유는 무엇입니까?
- 명령 문자열에서 올바른 출력을 얻으려면 어떻게 해야 합니까? (Python 스크립트에서 명령을 실행하고 있습니다)
- 내가 잘못된 방향으로 가고 있는 걸까? 나의 초기 목표는 (
history > history.txt && ./script.py
또는 같은 외부 작업을 수행할 필요 없이) Python 프로그램에서 완전한 타임스탬프가 있는 bash 기록을 얻는 것이었습니다history | ./script.py
.
감사해요:)
추가 정보
- MacOS 버전:
10.14.6 Mojave
- MacOS 배시 버전:
3.2.57
- 역사적 구성:시대를 초월한 카니발 역사
- 리눅스 버전:
Linux Mint 19.2
- 리눅스 배시 버전:
4.4.20
답변1
이 문제를 확인할 수 있습니다.
예, bash 버전 3.2.57 이하에는 기록 파일의 타임스탬프를 인식하지 못하기 때문에 문제가 있는 것 같습니다. bash 변경 파일에서 특정 변경 사항을 찾을 수 없습니다. Bash를 최신 버전(4+)으로 업그레이드해야 할 수도 있습니다.