zsh:找不到strftime命令。

6

我目前正在学习zsh,现在想使用strftime,但是出现了以下错误:

zsh: command not found: strftime

我认为我做错了什么,因为我经常看到其他人在他们的dotfiles中使用该函数。

3个回答

8

strftime 是在一个名为 datetimezsh 模块中定义的。使用 zmodload 命令可以从 $module_path 中以冒号分隔的目录列表加载模块。

在我的系统上:

% echo $module_path
/usr/lib/zsh/4.3.10
% ls -l $module_path
drwxr-xr-x 3 root root 4096 2009-11-05 01:03 zsh
% ls -l $module_path/zsh/datetime*
-rw-r--r-- 1 root root 9828 2009-09-10 02:45 /usr/lib/zsh/4.3.10/zsh/datetime.so
% type -a strftime
strftime not found
% zmodload zsh/datetime
% strftime %Y-%m-%d 1271603087
2010-04-18
% type -a strftime
strftime is a shell builtin
% /bin/date -d @1271603087 +%Y-%m-%d
2010-04-18

2

对于通过谷歌搜索到这里的任何人,现在有一种方法可以实现此操作,而不需要使用zmodload。(我使用它来检测当由于资源争用导致.zshrc运行缓慢时,因此我不希望它添加新的文件系统请求。)

${(%):-"%D{STRFTIME_STRING_HERE}"}

这段话的要点如下:

  1. Zsh允许在没有VAR的情况下进行${VAR:-DEFAULT}参数替换。
  2. VAR前加上(%),可以扩展PS1和其他类似的替换标记。(这是一个非常强大的功能,因为它还可以访问像%F{green}这样的东西。请参阅man zshmisc中的"扩展提示序列"了解更多信息。)
  3. 在提示扩展字符串中,%D{...}调用strftime(3)

我发现%D{%s}特别有用,因为%s可以检索“自纪元以来的秒数”时间戳,然后您可以对其进行算术运算。

(只需注意,虽然%s支持Linux、AIX、Illumos、MINIX、OSX和所有BSD系列系统,但它不是POSIX的一部分,并且在Solaris、HP-UX、UnixWare、OpenServer或Windows库Cygwin和MinGW依赖的在线strftime文档中未列为受支持的内容。)


2

strftime 是一个 C 函数,我相信在命令行中 date 有同样的功能。

更多信息请参见 man date

使用 --date=STRING 选项来指定要格式化的日期,而不是获取当前时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接