如何将历史命令与只读 PROMPT_COMMAND 一起使用?

如何将历史命令与只读 PROMPT_COMMAND 一起使用?

我有时会登录到我无法控制且PROMPT_COMMAND位于何处的主机readonly。有什么办法可以解决这个问题来运行history命令反正,例如使用PS1?我已经尝试过PS1='$(history -a; history -c; history -r; echo finished)'- 它会finished在每次提示时打印,但似乎不起作用:

  1. 在同一主机上打开两个终端A和B。
  2. 在终端 A 中,运行命令a
  3. 在终端 B 中,运行命令b
  4. 在 B 端子上按两次。

在主机所在的地方PROMPT_COMMAND='history -a; history -c; history -r;',这将导致终端 B 显示a。在PS1以它开头的主机上,$(history -a; history -c; history -r; echo finished)将显示在打开两个终端之前运行的命令。显而易见的原因是in 命令PS1在子 shell 中运行。

另一种选择是完全绕过全局 RC 文件:

bash --rcfile ~/.bashrc

然而,规避标准值的使用PROMPT_COMMAND将很可能不被系统管理员接受出于政策原因。

答案1

您可以在信号处理程序中运行历史命令,从而避免使用子 shell。然后PS1发送适当的信号:

trap 'history -a; history -c; history -r;' USR1
export PS1='$(kill -USR1 $$)'"$PS1"

相关内容