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