Mac
Linux
shell
Linuxコマンド

cal コマンドの引数の順番が気に入らない

コマンドラインで作業してて
日付を確認したい時によく cal コマンドを使いますが、
linux の場合こんな仕様になってます。

cal [[[day] month] year]

なので、来月のカレンダーが見たいなと思って

cal 06

とかやっても出るのは西暦 6 年のカレンダー…
正しくは cal 06 2018 なんだけど 2018 を打つのがめんどくさい。
前々から不満だったので、引数の順番を変えたく思ってやってみました。
仕様はこんな感じで。

  • cal
    • 今月を表示(デフォルトと同じ)
  • cal 5
    • 今年の 5 月を表示
  • cal 2018
    • 2018 年一年分を表示
  • cal 2019 11
    • 2019 年 11 月を表示

で、作ったのがこちら。

function _mycal() {
    if [ $# -eq 1 ] ; then
        if [ "$1" -le 12 ] ; then
            \cal "$1" "$(date +%Y)"
        else
            \cal "$1"
        fi
    elif [ $# -eq 2 ] ; then
        \cal "$2" "$1"
    else
        \cal "$@"
    fi
}
alias cal="_mycal"

仕様通りに動くか試してみる。

$ cal
      7月 2018
日 月 火 水 木 金 土
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
$ cal 5
      5月 2018
日 月 火 水 木 金 土
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
$ cal 2018
                             2018

        1月                   2月                   3月
日 月 火 水 木 金 土  日 月 火 水 木 金 土  日 月 火 水 木 金 土
    1  2  3  4  5  6               1  2  3               1  2  3
 7  8  9 10 11 12 13   4  5  6  7  8  9 10   4  5  6  7  8  9 10
14 15 16 17 18 19 20  11 12 13 14 15 16 17  11 12 13 14 15 16 17
21 22 23 24 25 26 27  18 19 20 21 22 23 24  18 19 20 21 22 23 24
28 29 30 31           25 26 27 28           25 26 27 28 29 30 31
...以下略...
$ cal 2019 11
     11月 2019
日 月 火 水 木 金 土
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

自分的な直感に一致するようになって満足。
mac, linux 両対応です。