现在我使用PROMPT_COMMAND自动执行“history -a”将历史列表附加到HISTFILE。
正如许多互联网文章所建议的那样。
另外,我已经安排在每次这样的操作之后在 HISTFILE 中附加第三行。
我记得:
第一行始终是时间戳:以“#”开头,后跟 10 位数字(自纪元以来的秒数)。
第二行是命令。
第三行现在是第一行的重复,但带有后缀
tty: /dev/pts/18
(或者伪终端数是什么)。
在正常情况下,这种方法很有效。但如果有特殊需要,例如在崩溃情况下,这种方法就不起作用了。因此,第三行就不用写了,因为在很多其他情况下,第三行就不用写了。
如果运行的命令陷入无限循环,这就没有帮助了。
我打算根据陷阱“DEBUG”编写一些代码。
但或许存在解决方案。
请已知一些事情。
问候
== 19.03.2023 08:10 附录 1 :: 几个月以来,我在“we_general_settings”中设置了我使用的 shell bash
HISTIGNORE="#"
因此,我将由我的 PROMPT_COMMAND 写入 HISTFILE 的附加第三行更改为以冒号“:”开头 ::
: #0123456789; tty: dev/pts/18;
经过这次改进,我的 HISTFILE 中的附加行也显示在历史列表中。
问候
== 19.03.2023 08:30 附录 2:: HISTFILE 中令人困惑的观察结果。
对于这份报告,首先我必须声明“<my date_command”是什么:
: # history - s -- "(date "+%F %T %Z %a") - tty: $(tty)"! echo
(几十年来我总是必须输入此命令两次:第一次带有前缀“:#”,然后不带--)
我的“<my tail_command”是:
tail -n40 /root/.bash_history | /media/... <my script to covert seconds since epoch in normal date_time>
现在测试开始:
0n 大约 08:46 在 shell pts/18 中我给出:
<my date_command>
<my tail_command>
HISTFILE 尾部的输出为:
#=====2023-03-19_08:46:25=====
: # history -s ...<my date_command>
: #=====2023-03-19_08:46:25=====; tty: /dev/pts/18;
#=====2023-03-19_08:46:31=====
2023-03-19 08:46:31 CET Sun - tty: /dev/pts/18;
: #=====2023-03-19_08:46:31=====; tty: /dev/pts/18;
(end)
现在,在 09:15,在 shell /dev/pts23 中我启动 utiliy less。
然后我回到 shell /dev/pts/18,等待,什么也不做。
现在,在 09:25,我在 /dev/pts/18 中重复前面给出的两个命令,即
<my date_command>
<my tail_command>
在 HISTFILE 尾部的输出中添加了以下几行:
#=====2023-03-19_08:46:39=====
tail -n40 ...<my tail_command>;
: #=====2023-03-19_08:46:39=====; tty: /dev/pts/18;
#=====2023-03-19_09:25:27=====
: # history -s ...<my date_command>
: #=====2023-03-19_09:25:27=====; tty: /dev/pts/18;
#=====2023-03-19_09:25:33=====
2023-03-19 09:25:33 CET Sun - tty: /dev/pts/18;
: #=====2023-03-19_09:25:33=====; tty: /dev/pts/18;
(end)
现在,在 09:44,在 shell /dev/pts/23 中我关闭了 utiliy less。
然后我回到 shell /dev/pts/18,等待,什么也不做。
现在,在 09:54,我在 /dev/pts/18 中重复前面给出的两个命令,即
<my date_command>
<my tail_command>
在 HISTFILE 尾部的输出中添加了以下几行:
#=====2023-03-19_09:25:38=====
tail -n40 ...<my tail_command>;
: #=====2023-03-19_09:25:38=====; tty: /dev/pts/18;
#=====2023-03-19_09:15:16=====
less /tmp/WEx1
: #=====2023-03-19_09:45:42=====; tty: /dev/pts/23;
#=====2023-03-19_09:54:49=====
: # history -s ...<my date_command>
: #=====2023-03-19_09:54:49=====; tty: /dev/pts/18;
#=====2023-03-19_09:54:55=====
2023-03-19 09:54:55 CET Sun - tty: /dev/pts/18;
#=====2023-03-19_09:54:55=====; tty: /dev/pts/18;
(end)
笔记:
我可以想象一些奇怪的事情,例如:
当调用 less 时,bash 会记录此命令的时间。但不会附加到 HISTFILE,因为必须等待下一个提示。
结果是 09:15:16 在 09:25:38 之后出现在 HISTFILE 中。——很愚蠢。
关于这一点:在关闭less之后,我发现额外的HISTFILE行显示09:45:42。
从我所做的事情来看,我知道这是因为关闭次数较少。
但一般来说,连贯性不会自动显现,需要适当的输出。
等等等等。
提出问题和寻求帮助的需求可以写成一本书。请阅读所有 bash 的奇怪之处并思考如何规避它们。
问候