다음에 나열된 명령 중 일부를 실행하고 싶습니다.이 기사,예를 들어:
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은 수년 동안 업데이트하지 않았습니다.