如何保存2个历史文件?一个有时间戳,另一个没有

时间:2016-04-21 10:17:03

标签: linux bash

我想实现这一目标的原因是因为我一方面要删除重复项以便于命令检索, 虽然仍然可以选择查看所有内容以及时间戳,以防万一发生了不好的事情,并且可能会查看我执行的命令可能会有所帮助。

这是我目前所拥有的,由于时间戳而不能用于擦除重复项(但是当然即使它使用正则表达式来删除具有唯一时间戳的重复项,我也会失去能力查看所有已执行命令的列表)

export HISTFILESIZE=100000000
export HISTSIZE=100000000
export HISTTIMEFORMAT="[%F %T] "
HISTCONTROL=ignoredups:erasedups
shopt -s histappend
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"
#http://unix.stackexchange.com/questions/18212/bash-history-ignoredups-and-erasedups-setting-conflict-with-common-history

谢谢!

1 个答案:

答案 0 :(得分:1)

我可以想到一个简单的解决方案。使用bash utils打印命令输出,而不使用如下所示的时间戳: -

history | awk '{ s = ""; for (i = 4; i <= NF; i++) s = s $i " "; print s }' | uniq 

注意: - history配置$HISTTIMEFORMAT必须与问题中指定的awk命令的时间戳一致。它基本上打印了时间戳之后的所有列,并将其传递给uniq,省略了重复的行。您甚至可以将内容(> logfile)写入$HOME中的文件。

您还可以将命令添加为bash函数,并与原始history命令并行运行。

将以下行添加到~/.bashrc文件

function history_cool() {
   history | awk '{ s = ""; for (i = 4; i <= NF; i++) s = s $i " "; print s }' | uniq 
}

有了这个,您现在可以并行运行命令historyhistory_cool

  $  history
  0  [2016-04-22 17:54:58] echo "foo"
  1  [2016-04-22 17:55:06] echo "bar"
  2  [2016-04-22 17:55:30] ls
  3  [2016-04-22 17:55:39] echo "foo"

  $  history_cool
  echo "foo"
  echo "bar"
  ls