OS X 中日历 (cal) 中的多月视图

OS X 中日历 (cal) 中的多月视图

我希望运行中列出的一些命令本文,例如:

cal -3

它应该显示上个月、本月和下个月。

这个命令的作用是不是在 OS X 中工作。

$ cal -3
cal: illegal option -- 3
usage: cal [-jy] [[month] year]
       cal [-j] [-m month] [year]
       ncal [-Jjpwy] [-s country_code] [[month] year]
       ncal [-Jeo] [year]

我可以在 OS X 中使用替代形式吗?

以供参考:

$ which cal
/usr/bin/cal

$ man cal 

显示这可能是默认的 OS X 版本:"...BSD General Commands Manual..."

答案1

OSX 没有与 Linux 相同版本的实用程序。您可以信赖的共同点是POSIX, 哪个定义cal但没有任何选择。

Linux 上有两个常见版本cal: 一个来自实用程序Linux(例如在费多拉上)和来自 FreeBSD 的一个(例如在Ubuntu上)。两者都有-3选择。 OSX 基于 FreeBSD,但是它的版本是一个没有选项的旧版本-3

您可以使用 bash/zsh 脚本来模拟它:

#!/bin/bash
case $# in
  0) month=$(date +%m) year=$(date +%Y);;
  2) month=$1 year=$2;;
  *) echo 1>&2 "Usage: $0 [MONTH YEAR]"; exit 3;;
esac
month=${month#"${month%%[!0]*}"}
if ((month == 1)); then
  previous_month=12 previous_year=$((year-1))
else
  previous_month=$((month-1)) previous_year=$year
fi
if ((month == 12)); then
  next_month=1 next_year=$((year+1))
else
  next_month=$((month+1)) next_year=$year
fi
paste <(cal "$previous_month" "$previous_year") \
      <(cal "$month" "$year") \
      <(cal "$next_month" "$next_year")

答案2

我已经习惯了 Linux 版本的cal,所以我继续移植了Debian 版本的 bsdmainutils其中包括Homebrew 公式的可执行cal文件ncal,您可以找到这里

讽刺的是,这些实用程序实际上来自 FreeBSD 上游源代码,但 Apple 多年来一直没有更新它们。

相关内容