【发布时间】:2011-02-09 08:47:36
【问题描述】:
我目前正在学习 zsh,现在我想使用 strftime 但我得到了:
zsh: command not found: strftime
我认为我做错了什么,因为我看到人们一直在他们的 dotfiles 中使用该功能。
【问题讨论】:
标签: command-line zsh strftime
我目前正在学习 zsh,现在我想使用 strftime 但我得到了:
zsh: command not found: strftime
我认为我做错了什么,因为我看到人们一直在他们的 dotfiles 中使用该功能。
【问题讨论】:
标签: command-line zsh strftime
strftime 在名为 datetime 的 zsh 模块中定义。 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
【讨论】:
strftime 是一个 C 函数,我相信 date 在命令行上具有所有相同的功能。
更多信息请参见man date。
使用--date=STRING 选项指定要格式化的日期,而不是获取当前时间。
【讨论】:
对于通过 Google 到达这里的任何人,现在有一种不需要zmodload 的方法来执行此操作。 (当 .zshrc 由于资源争用而变慢时,我将它用于detect,因此我不希望它添加新的文件系统请求。)
${(%):-"%D{STRFTIME_STRING_HERE}"}
大意如下:
VAR 的情况下替换${VAR:-DEFAULT} 参数。(%) 放在VAR 之前可以扩展PS1 和朋友中使用的替换标记。 (这是一个非常强大的功能,因为它还授予对 %F{green} 等内容的访问权限。有关更多信息,请参阅 man zshmisc 中的“提示序列扩展”。)%D{...} 调用 strftime(3)。我发现%D{%s} 特别有用,因为%s 检索“自纪元以来的秒数”时间戳,然后您可以对其进行算术运算。
(请注意,虽然%s 在 Linux、AIX、Illumos、MINIX、OSX 和所有 BSD 系列系统上受支持,但它不是 POSIX 的一部分,并且未在在线 @987654336 中列为受支持@ Solaris、HP-UX、UnixWare、OpenServer 或 Cygwin 和 MinGW 所依赖的 Windows 库的文档。)
【讨论】: