【问题标题】:How to get previous days date in kshell如何在kshell中获取前几天的日期
【发布时间】:2014-04-29 21:33:55
【问题描述】:

我有一个给出前几天日期的命令:

date -d '-1 day' '+%Y%d%m'

同样的命令在 AIX 系统中运行时报错。

“-d 不被识别标志”

下面的命令正在运行,它给出了当前日期 AIX 系统。

date -u +%Y%d%m

但下面的命令给出错误为“1 不是识别标志”

date -u '-1 day' +%Y%d%m

如何在 AIX 中获取前几天的日期。

【问题讨论】:

  • 错误是什么?该命令在我的系统上运行良好,ksh --version 提供sh (AT&T Research) 93u+ 2012-08-01
  • 你得到什么错误?
  • date 的行为由平台而非 shell 决定,除非您的平台具有完整的 ast-open 套件,其中包含许多 unix 实用程序的 ksh 内置等效项。

标签: linux bash unix ksh aix


【解决方案1】:

date 是一个程序,而不是 shell 的内置命令。所以无论使用什么外壳,它都应该可以工作。

falsetru@ubuntu:~$ bash
falsetru@ubuntu:~$ date -d '-1 day' '+%Y%d%m'
20142103
falsetru@ubuntu:~$ ksh
$ date -d '-1 day' '+%Y%d%m'
20142103
$ type date
date is a tracked alias for /bin/date

【讨论】:

  • 嗨,我的系统是 AIX。它给出了错误作为无法识别的标志:d
  • @user3164140,在 bash 和 ksh 中尝试 type datewhich date。比较结果。
【解决方案2】:

操作时区可以更改时钟几个小时。 一个额外的复杂性是夏令时。由于夏令时,24 小时前可以是今天或前天。

您确定昨天是 20 或 30 小时前。哪一个?好吧,最近的一个不是今天。

echo "$(TZ=GMT+30 date +%Y-%m-%d)\n$(TZ=GMT+20 date +%Y-%m-%d)" | grep -v $(date +%Y-%m-%d) | tail -1

以上命令用于 ksh。当你使用 bash 时,你需要 echo -e:

echo -e "$(TZ=GMT+30 date +%Y-%m-%d)\n$(TZ=GMT+20 date +%Y-%m-%d)" | grep -v $(date +%Y-%m-%d) | tail -1

【讨论】:

    【解决方案3】:

    date -d 是一个GNUism,因此在非GNU 实现中不可用,如香草AIX date。但是,您可以在AIX 上安装coreutils(下载链接here),GNU date 附带。

    【讨论】:

      猜你喜欢
      • 2020-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      • 1970-01-01
      • 2022-11-03
      相关资源
      最近更新 更多