在 Linux 命令行中规划你的假期日历
欢迎阅读今天推出的 Linux 命令行玩具降临日历。如果这是你第一次访问本系列,你可能会问:什么是命令行玩具。即使我不太确定,但一般来说,它可以是一个游戏或任何简单的娱乐,可以帮助你在终端玩得开心。
很可能你们中的一些人之前已经看过我们日历上的各种选择,但我们希望给每个人至少一件新东西。
我们在没有创建实际日历的情况下完成了本系列的第 7 天,所以今天让我们使用命令行工具来做到这一点:cal
。就其本身而言,cal
可能不是最令人惊奇的工具,但我们可以使用其它一些实用程序来为它增添一些趣味。
很可能,你的系统上已经安装了 cal
。要使用它,只需要输入 cal
即可。
$ cal
December 2018
Su Mo Tu We Th Fr Sa
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
的更多信息,查看 Opensouce.com 社区版主 Don Watkin 的优秀文章 date 和 cal 命令概述。
现在,让我们用一个漂亮的盒子来为它增添趣味,就像我们在上一篇 Linux 玩具文章中介绍的那样。我将使用钻石块,用一点内边距来对齐。
$ cal | boxes -d diamonds -p a1l4t2
/ / /
///\/ ///\/ ///\/
///\///\///\///\///\///\/
//\///\///\///\///\///\///\
\/// /\//
/ /
/ December 2018 /
//\ Su Mo Tu We Th Fr Sa //\
\// 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 | boxes -d diamonds -p a1t2l3 | boxes -a c -d scroll
/ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| /~~ /~~ |
| | / / / | / /|
| /| ///\/ ///\/ ///\/ | / |
| ~~ | ///\///\///\///\///\///\/ | ~~ |
| | //\///\///\///\///\///\///\ | |
| | \/// /\// | |
| | / / | |
| | / December 2018 / | |
| | //\ Su Mo Tu We Th Fr Sa //\ | |
| | \// 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 / | |
| | / / | |
| | //\/ ///\ | |
| | \///\///\///\///\///\///\// | |
| | /\///\///\///\///\///\/// | |
| | /\/// /\/// /\/// | |
| | / / / | |
| | | |
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| /
/ /
~~~ ~~~
完美。现在,这事有点小激动了。我喜欢我们的设计,但我想更妙一些,所以我要给它上色。但是 Opensource.com 员工所在的北卡罗来版纳州罗利办公室,本周末很有可能下雪。所以,让我们享受彩色降临日历,然后用雪擦掉它。
关于雪,我抓取了一些 Bash 和 Gawk 的漂亮代码片段,幸亏我发现了 CLIMagic。如果你不熟悉 CLIMagic,去查看他们的网站,在 Twitter 上关注他们。你会满意的。
我们开始吧。让我们清除屏幕,扔掉四四方方的日历,给它上色,等几秒钟,然后用暴风雪把它吹走。这些在终端可以用一行命令完成。
$ clear;cal|boxes -d diamonds -p a1t2l3|boxes -a c -d scroll|lolcat;sleep 3;while :;do echo $LINES $COLUMNS $(($RANDOM%$COLUMNS)) $(printf "u2744n");sleep 0.1;done|gawk '{a[$3]=0;for(x in a) {o=a[x];a[x]=a[x]+1;printf "