zsh:未找到 strftime 命令

发布于 2024-08-29 19:20:41 字数 164 浏览 6 评论 0原文

我目前正在学习 zsh,现在我想使用 strftime 但我得到:

zsh:找不到命令:strftime

我认为我做错了什么,因为我看到人们一直在他们的点文件中使用该函数。

I am currently learning the zsh and now I wanted to use strftime but i get:

zsh: command not found: strftime

I think I'm doin' something wrong, since I see people using that function all the time in their dotfiles.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

少钕鈤記 2024-09-05 19:20:41

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

strftime is defined in a zsh module called datetime. The zmodload command loads modules from a colon-separated list of directories in $module_path.

On my system:

% 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
森末i 2024-09-05 19:20:41

对于通过 Google 到达这里的任何人来说,现在有一种不需要 zmodload 即可完成此操作的方法。 (我用它检测 .zshrc 由于资源争用而缓慢,所以我不希望它添加新的文件系统请求。)

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

其要点如下:

  1. Zsh允许在没有 VAR 的情况下替换 ${VAR:-DEFAULT} 参数。
  2. (%) 放在 VAR 之前可以扩展 PS1 及其同类中使用的替换标记。 更多信息,请参阅 man zshmisc 中的“提示序列扩展”。)
  3. (这是一个非常强大的功能,因为它还允许访问 %F{green} 等内容。有关 提示扩展字符串,%D{...} 调用 strftime(3)

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

(请注意,虽然 %s 在 Linux、AIX、Illumos、MINIX、OSX 和所有 BSD 系列系统上受支持,但它不是 POSIX 的一部分,也没有在适用于 Solaris、HP-UX、UnixWare、OpenServer 或 Cygwin 和 MinGW 所依赖的 Windows 库的在线 strftime 文档。)

For anyone who arrives here via Google, there's now a way to do this that doesn't require a zmodload. (I use it to detect when .zshrc is slow due to resource contention, so I don't want it to add new filesystem requests.)

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

The gist of it is as follows:

  1. Zsh allows ${VAR:-DEFAULT} parameter substitution without a VAR.
  2. Putting (%) before VAR enables expansion of the substitution tokens used in PS1 and friends. (This is a very powerful feature because it also grants access to things like %F{green}. See "expansion of prompt sequences" in man zshmisc for more.)
  3. Within a prompt-expanded string, %D{...} invokes strftime(3).

I find %D{%s} particularly useful because %s retrieves the "seconds since the epoch" timestamp, which you can then do arithmetic on.

(Just be aware that, while %s is supported on Linux, AIX, Illumos, MINIX, OSX, and all BSD-family systems, it's not part of POSIX and isn't listed as supported in the online strftime documentation for Solaris, HP-UX, UnixWare, OpenServer, or the Windows libraries Cygwin and MinGW depend on.)

×眷恋的温暖 2024-09-05 19:20:41

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

有关更多信息,请参阅man date

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

strftime is a C function, I believe date has all the same functionality on the command line.

See man date for more.

One uses the --date=STRING option to specify a date to format instead of getting current time.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文