___

___

在 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)。

答案2

Fish 跟踪但尚未显示历史时间戳。看问题 #677- 那里有一些贡献的脚本来解析历史文件。

Fish 不支持感叹号历史扩展,因为语法很难记住并且经常被错误调用。您可以关注以下讨论第288章。您通常要做的就是开始输入命令,并在出现时接受自动建议(右箭头或 ctrl-F)。另一种选择是键入部分命令并使用向上箭头循环显示匹配的历史记录项。

相关内容