oh-my-zsh历史记录日期格式

Mar*_*tko 3 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

非常感谢任何反馈!

Ada*_*hon 5

简短答案:

fc -li | grep $(date -I)
Run Code Online (Sandbox Code Playgroud)

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


至于您遇到的问题:

  1. 由于fc是一个内置的zsh,你可以找到它在文档zshbuiltin手册页

  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'
    
    Run Code Online (Sandbox Code Playgroud)

    这使用strftime功能(带有的更多信息man 3 strftime)格式化时间戳。因此,格式选项与您可以使用的格式选项几乎相同date

  4. 您可以date使用该-标志告诉不要填充字段。例如6/22/16

    date +%-m/%-d/%y
    
    Run Code Online (Sandbox Code Playgroud)

    此标志也适用于fc


答案略长:

如果您更喜欢ISO 8601以外的其他时间戳格式,则可以仅指定一个,同时用于datefc。例如:美国日期格式为非填充,时钟时间为0(带秒):

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