在 Fish 中,当我输入时,history | less
我会看到以下内容:
history | less
export HISTTIMEFORMAT="%h/%d - %H:%M:%S "
bash
在 bash 中我看到这个:
491 18/04/16 14:31:02 cd
492 18/04/16 14:31:02 ls -l
493 18/04/16 14:31:02 less .bashrc
因此我可以使用 !491 再次执行该命令,并且我还可以在我的服务器上进行审核,但 Fish 没有办法显示此内容。我还尝试添加时间和日期,export HISTTIMEFORMAT="%h/%d - %H:%M:%S "
但什么也没有,关于如何像在 bash 中添加它有什么想法吗?
答案1
如果您使用参数执行 Fish,现在它支持内置历史命令中的时间戳--show-time
。
(您必须至少使用 2016 年 10 月发布的 Fish 版本 2.4)
根据您的原始示例,您可以指定格式,如下所示:
$> history --show-time='%h/%d - %H:%M:%S '
或将其保存到函数中(此处不使用别名,因为 1. 递归和 2. 长):
# ~/.config/fish/functions/history.fish
function history
builtin history --show-time='%h/%d - %H:%M:%S ' | tail -r
end
我将额外的管道添加到 tail-reverse 中,以便它像 bash 一样从上到下读取history
。
将其添加到您的鱼类功能中,这对您来说应该足够了。
___
似乎没有办法打印“历史索引”(给定命令对应的“行号”)。为了进行比较,这是我首选的 bash 历史记录格式:
228 01/05/17 14:47:53 $> history
229 01/05/17 14:48:11 $> vim .bash_profile
230 01/05/17 14:48:42 $> source .bash_profile
231 01/05/17 14:48:45 $> history
232 01/05/17 15:15:29 $> ls
233 01/05/17 15:15:30 $> clear
234 01/05/17 15:15:32 $> history
以及我写这篇文章时相应的鱼类历史:
01/05/17 15:05:53 $> vim history.fish
01/05/17 15:10:01 $> man history
01/05/17 15:14:50 $> history | tail -r | less
01/05/17 15:15:01 $> history | tail -r
01/05/17 15:15:11 $> ls
01/05/17 15:15:14 $> vim history.fish
01/05/17 15:15:41 $> history
坦率地说,它已经足够接近了。
___
更新:经过一番思考,您可以继续通过管道传递结果以获得这些行号。它并不完美(多行命令将被视为输入的每一行的新“行”),但它为您提供了几乎所有您想要的类似于 bash 的 Fish 历史记录的内容。这是我的最终history.fish
文件:
function history
builtin history --show-time='%m/%d/% %T $> ' | tail -r | less -N +G
end
less -N
给出行号,并less +G
从底部开始文件(这样您就可以自动查看最近的条目)。
tail -r
仅在基于 FreeBSD 的系统(包括 Mac OS X)上兼容,但您可以使用类似的替代方案,例如 tac(如果您使用的是 GNU coreutils,则可以使用 gtac)。