【问题标题】:zsh: strftime command not foundzsh:未找到 strftime 命令
【发布时间】:2011-02-09 08:47:36
【问题描述】:

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

zsh: command not found: strftime

我认为我做错了什么,因为我看到人们一直在他们的 dotfiles 中使用该功能。

【问题讨论】:

    标签: command-line zsh strftime


    【解决方案1】:

    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】:

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

      更多信息请参见man date

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

      【讨论】:

        【解决方案3】:

        对于通过 Google 到达这里的任何人,现在有一种不需要zmodload 的方法来执行此操作。 (当 .zshrc 由于资源争用而变慢时,我将它用于detect,因此我不希望它添加新的文件系统请求。)

        ${(%):-"%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 的一部分,并且未在在线 @987654336 中列为受支持@ Solaris、HP-UX、UnixWare、OpenServer 或 Cygwin 和 MinGW 所依赖的 Windows 库的文档。)

        【讨论】:

          猜你喜欢
          • 2021-01-01
          • 2014-07-21
          • 2018-02-11
          • 1970-01-01
          • 1970-01-01
          • 2016-08-27
          • 2013-12-17
          • 1970-01-01
          • 2015-10-15
          相关资源
          最近更新 更多