哦-my-zsh历史日期格式

时间:2016-06-22 15:00:04

标签: linux zsh oh-my-zsh

我正在尝试格式化oh-my-zsh历史输出。 似乎fc是可行的方法,因为history会忽略HISTFILEHISTSIZEHISTTIMEFORMAT

中的任何设置

有没有办法像我date

那样格式化它

我无法在线找到有关fc命令的任何适当文档。还没有关于fc的手册页。

使用某种欧洲格式输出历史记录的工作是fc -flE

最后,我想要做的是找出我今天和何时输入的命令数。

那里有一点问题。

目前我有这样的设置:

alias today='date +"%d.%m.%Y"' 没有格式标记可以让我删除前导零(我想要6而不是06)

但是我在这里有比使用奇怪的zsh history命令fc更多的格式选项。 历史记录输出日期为22.6.2016,today为22.06.2016 因此,我不能这样做: fc -flE | grep $(today) | wc -l

非常感谢任何反馈!

1 个答案:

答案 0 :(得分:5)

简答:

fc -li | grep $(date -I)

选项-i指示fc以ISO 8601 yyyy-mm-dd HH:MM格式打印时间戳。 -I选项指示日期以ISO 8601格式输出日期(没有时间)。

至于您遇到的问题:

  1. 由于fczsh的内置版,您可以在zshbuiltin manpage中找到其文档。

  2. 选项-f(以美国MM/DD/YY hh:mm格式打印时间戳)和-E(欧洲dd.mm.yyyy hh:mm格式的打印时间戳)是互斥的, -E优先(默默地,没有错误消息)。如果您不想要欧洲格式,请删除-E选项。

  3. 您可以使用选项fc明确指定-t fmt的时间戳格式。以下将打印时间戳,如06/22/2016 - 23:07:09(注意零填充):

    fc -lt '%m/%d/%Y - %H:%M:%S'
    

    这使用strftime函数(man 3 strftime的更多信息)来格式化时间戳。因此,格式选项几乎与您可以使用date

  4. 的格式选项相同
  5. 您可以告诉date不要使用-标记填充字段。例如6/22/16

    date +%-m/%-d/%y
    

    此标志也适用于fc

  6. 答案稍长:

    如果您更喜欢其他时间戳格式而不是ISO 8601,则可以指定一个用于datefc的格式。例如:非填充的美国日期格式和带有秒的0填充时钟时间:

    TS_DATE="%-m/%-d/%y"
    TS_TIME="%H:%M:%S"
    fc -lt "$TS_DATE $TS_TIME" | grep $(date +$TS_DATE)