如何仅获取当前 shell 进程的命令历史记录?

Tim*_*Tim 2 bash command-history

在 bash shell 中,当我运行 时history,它提供所有命令的历史记录,不仅是在当前 shell 中键入的命令,还包括在先前 shell 中键入的命令的历史记录。到目前为止,如何获取仅在当前 shell 中键入的命令的历史记录?当您想查找已知已在当前 shell 中键入的命令时,这很有用。谢谢。

cku*_*jau 5

只要histappend没有设置,没有游戏玩得PROMPT_COMMAND历史命令:

  -a 追加“新”历史行(输入的历史行 
       从当前 bash 会话开始)到 
       历史文件。

如果我们想让我们的真实历史文件不受伤害,我们可以这样做:

$猫.bash_history
#1482030925
ls
#1482030926
日期
#1482030928
自由

$ echo "还有一个命令"
多一个命令

$ echo "另一个命令"
另一个命令

$ HISTFILE=foo history -a
$猫福
#1482031879
猫 .bash_history
#1482031887
回声“还有一个命令”
#1482031892
回声“另一个命令”
#1482031899
HISTFILE=foo 历史记录 -a

来自早期会话(ls、date、free)的先前命令没有出现在我们的“新”历史文件中,foo- 我希望这个例子能说明这一点。

另一种方法是保存当前历史文件(在登录会话开始时!),然后将当前会话的历史记录附加到历史文件(通过运行“history -a”或通过注销),然后比较两者文件:

$历史> hist.backup

$ echo "一个新命令"
一个新命令
$ echo "还有一个命令"
多一个命令

$ 历史 > hist.current 
$ diff hist.{backup,current}
4a5,7
> 5 2016-12-17 19:38:57 回声“一个新命令”
> 6 2016-12-17 19:39:01 回声“还有一个命令”
> 7 2016-12-17 19:39:07 历史 > hist.current 

注意:我非常喜欢设置HISTTIMEFORMAT='%F %T '(在 bash 3, IIRC 中引入),时间戳有助于找出命令何时执行。