I've got a weird one here. I'm writing a program that needs access to bash history. I had a look at parsing the
.bash_eternal_history in my config) file, but realized the heavy lifting had already been done by the
Some contents of my history file look like this. While I could parse this myself, I would prefer to rely on
history's standardized parser as it already deals with edge-case multiline commands, timestamps, histfile formats, and works cross-platform.
#1587920724 echo test #1587920725 echo test2 #1587920729 touch file #1587920731 rm file #1587920732 history
When typing the
history command, I get a nice list of timestamped history, as follows:
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 is a shell builtin, I need to run it through a bash command string in my program. However, when running the command
bash -ic 'history -r; history' , I am greeted with this:
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
The commented timestamps are printed out as if they were commands, and everything has the same timestamp (the time I ran the command).
The strange part is, on Linux,
bash -ic 'history -r; history' produces exactly the same output as
history, in the regular format with correct timestamps, which is what I expected to happen.
I guess I would like to know:
- Why is the output of the two commands different in MacOS but the same in Linux?
- How can I achieve the correct output from a command string? (I am running the command from a Python script)
- Am I going about this in the wrong way? My original aim was to get the full timestamped bash history from within a Python program (without doing something external like
history > history.txt && ./script.pyor
history | ./script.py).
- MacOS version:
- MacOS bash version:
- History config: Eternal bash history
- Linux version:
Linux Mint 19.2
- Linux bash version: