如何读取内存中当前的会话历史记录(注销时最终写入“.bash_history”的历史记录)

如何读取内存中当前的会话历史记录(注销时最终写入“.bash_history”的历史记录)

我已经多次遇到这个问题,我需要访问当前活动会话的历史记录。除非有更简单的方法,否则我将编写一个 C 程序来从目标会话中读取此内容。

有谁知道 bash 会话的会话历史记录保存在内存中的哪个位置? 这是保存在环境变量下还是 /proc 中的某个位置?我到处搜索这个,我能找到的最接近的答案是“记忆中的某个地方”。可以理解的是,系统可以配置为每次有人执行命令时都会写入会话历史记录,但这对于我的特定用途来说并不实用(如果我可以将“history -a”命令作为另一个活动会话运行,那么这可能就足够了) 。

如果有人对在哪里找到此信息或在哪里找到包含此信息的起始内存地址(对于给定会话/TTY)有任何建设性的提示或指示。

请记住,这不是典型的历史问题的重复,询问如何将当前历史会话存储到内存或如何配置 bash 以立即存储它(互联网和这个论坛已经充满了这些问题:))。

这是询问如何获取也以 root(或其他用户)身份登录的其他会话的当前“内存历史记录”。

感谢您的帮助,

杰夫

答案1

history -a FILE保存历史记录自上次运行以来history -aFILE,并将history -r FILE的内容加载FILE到内存历史记录中。让我们尝试在具有默认配置的 shell 中使用它:

$ PS1='parent\$ ' bash --noprofile --norc

现在让我们清空要使用的自定义历史记录文件和默认的 Bash 历史记录文件:

parent$ > history.txt
parent$ > ~/.bash_history

然后我们开始其他用于演示保存和加载历史记录的子 shell:

parent$ PS1='child\$ ' bash --noprofile --norc

然后运行命令:

child$ echo foo
foo

将历史记录保存到给定文件:

child$ history -a history.txt

将历史记录附加到默认文件:

child$ cat history.txt >> ~/.bash_history

退出外壳:

child$ exit
exit

验证自定义历史记录文件是否包含我们期望的内容:

parent$ cat history.txt
echo foo
history -a history.txt

验证 Bash 历史文件是否包含我们期望的内容:

parent$ cat ~/.bash_history
echo foo
history -a history.txt
cat history.txt >> ~/.bash_history
exit

相关内容