在 bash 中:如何在调用任何命令时自动执行命令,例如通过 PROMPT_COMMAND,但不等待下一个提示?

在 bash 中:如何在调用任何命令时自动执行命令,例如通过 PROMPT_COMMAND,但不等待下一个提示?

现在我使用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 的奇怪之处并思考如何规避它们。

问候

相关内容