我想实现这一目标的原因是因为我一方面要删除重复项以便于命令检索, 虽然仍然可以选择查看所有内容以及时间戳,以防万一发生了不好的事情,并且可能会查看我执行的命令可能会有所帮助。
这是我目前所拥有的,由于时间戳而不能用于擦除重复项(但是当然即使它使用正则表达式来删除具有唯一时间戳的重复项,我也会失去能力查看所有已执行命令的列表)
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
谢谢!
答案 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
}
有了这个,您现在可以并行运行命令history
和history_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