在 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