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

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

在 bash shell 中,当我运行 时history,它不仅提供当前 shell 中键入的所有命令的历史记录,还提供以前 shell 中键入的命令的历史记录。如何获取迄今为止仅在当前 shell 中键入的命令的历史记录?当您想要查找已知已在当前 shell 中键入的命令时,这非常有用。谢谢。

答案1

前提是组织附加未设置并且没有玩任何游戏提示命令, 这历史命令可以:

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

如果我们想离开我们的真实的历史文件完好无损,我们可以这样做:

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

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

$ echo“另一个命令”
另一个命令

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

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

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

$ 历史 > hist.backup

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

$ 历史 > hist.current
$ diff 历史记录。{备份,当前}
4a5,7
> 5 2016-12-17 19:38:57 echo "一个新命令"
> 6 2016-12-17 19:39:01 echo "还有一个命令"
> 7 2016-12-17 19:39:07 历史 > hist.current

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

答案2

用于comm将整个历史记录(包括当前 Bash 会话)与已保存的历史记录进行比较,.bash_history并仅打印当前会话特有的那些行——这应该仅显示自启动当前 Bash shell 以来执行的那些命令

comm --nocheck-order -23 <( history | cut -c 8- ) ~/.bash_history

相关内容