如何在bash脚本中获得“之前执行的命令”?

时间:2011-07-20 02:32:50

标签: bash

我使用多个bash会话,我想在一个文件中跟踪所有这些会话的历史记录(我不关心它是从多个会话多路复用,我总是可以在它前面放置一个会话标识符。我试过了

shopt -s histappend

并添加

history -a 

$PROMPT_COMMAND变量。但是它们都没有真正适合我,我不明白为什么它们不起作用(就我所知,它们表现得非常不确定......有时它们会从多个会话中复用命令,有时它们不会)。

这个问题的目标是探索另一种方法来保持所有会话的历史记录,在那里我可以控制我写入历史记录的内容。我们的想法是将“previous command”存储在shell变量中,然后将该变量回显到PS1变量定义中的history-log文件。

问题是:如何在shell变量中获取“之前执行的命令”。我知道我可以在交互式bash会话中执行echo !! >> logfile.txt以将其记录到日志文件中。但是我如何在脚本文件(或.bashrc文件)中执行此操作?

我试过了

PROMPT_COMMAND="PC=$_;"
PREVIOUS_COMMAND=$(echo $PC)  # $_ only gives the last argument of previous command
export PS1="[\u@\h \w] [$PREVIOUS_COMMAND $(echo $_) $_] $ "

但这一切都无效。

谢谢你的时间, 〜瑜珈

1 个答案:

答案 0 :(得分:11)

这样的东西
fc -ln -1

应该有效。也就是说,你可能遇到并发访问问题(阅读:多个shell覆盖彼此的历史记录),你可能无法用手做得更好。