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의 것(예:우분투에서). 두 가지 모두에 대한 옵션이 있습니다 -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

이미 리눅스 버전에 익숙해서 cal포팅을 하게 되었어요.bsdmainutils의 데비안 버전여기에는 Homebrew 공식에 대한 실행 cal파일이 포함되어 있습니다 ncal.여기.

아이러니하게도 이러한 유틸리티는 실제로 FreeBSD 업스트림 소스 코드에서 제공되었지만 Apple은 수년 동안 업데이트하지 않았습니다.

관련 정보