fortune+cowsay+lolcat:实现彩虹色终端随机问候语

终端永远都是折腾的主场之一。
每次在登陆阿里云的 ubuntu 时都会展示一段欢迎词,并且并且带有 Alibaba Cloud 的字样,于是就开始琢磨,这个欢迎词应该是有办法自定义的。

1
2
3
4
5
6
7
8
9
Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.4.0-104-generic x86_64)

* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage

Welcome to Alibaba Cloud Elastic Compute Service !

Last login: Fri May 13 11:27:32 2022 from xx.xx.xx.xx

针对每次登陆都展示相同的问候语,较为简单和通用的办法为修改 /etc/motd 这个文件,果不其然,查看其中的内容:

1
2
cat motd
Welcome to Alibaba Cloud Elastic Compute Service !

随机问候

先来看看几个效果图。

随即问候效果图1
随即问候效果图2

要实现这样的效果,需要用到3个组件:

  • fortune
  • cowsay
  • lolcat

其中,fortune 负责输出随机问候语,cowsay 用于套框和加入小动物形象,而 lolcat 负责对这些字符画着色。

先安装这些组件(此处为ubuntu的安装办法,其他发行版可以自行上网查找安装方法):

1
2
3
4
5
6
# 安装 fortune 和 中文库
sudo apt install fortune fortunes-zh
# 安装 cowsay
sudo apt install cowsay
# 安装 lolcat
sudo apt install lolcat

每个组件的作用

先来看看 fortune。fortune 用于输出随机的名言、诗词或者是一些程序文档。执行几次就能够明白:

1
2
3
4
5
6
7
8
9
10
❯ fortune
常羡人间琢玉郎,天应乞与点酥娘。尽道清歌传皓齿,风起,雪飞炎海变清凉。
万里归来颜愈少,微笑,笑时犹带岭梅香。试问岭南应不好,却道:此心安处是吾乡。
-- 苏轼《定风波》
❯ fortune
Nothing so needs reforming as other people's habits.
-- Mark Twain
❯ fortune
白发悲花落,青云羡鸟飞。
-- 岑参《寄左省杜拾遗》

接着是 cowsay。cowsay 用于将输入的内容放到小动物的说话的框中,使其更加地有观赏性和趣味性。

1
2
3
4
5
6
7
8
9
❯ echo abcdefg | cowsay
_________
< abcdefg >
---------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||

通过查看 cowsay 的 usage,可以看到,不光是有牛一种小动物,还有很多内置的形象可以使用,通过 -f 参数后加内置的形象即可使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
❯ cowsay -h
cow{say,think} version 3.03, (c) 1999 Tony Monroe
Usage: cowsay [-bdgpstwy] [-h] [-e eyes] [-f cowfile]
[-l] [-n] [-T tongue] [-W wrapcolumn] [message]
❯ echo abcdefg | cowsay -f sheep
_________
< abcdefg >
---------
\
\
__
UooU\.'@@@@@@`.
\__/(@@@@@@@@@@)
(@@@@@@@@)
`YY~~~~YY'
|| ||

而怎么能够知道内置了多少种小动物呢?其实每种小动物都是一个配置文件,并存在 /usr/share/cowsay/cows 中:

1
2
3
4
5
6
7
8
9
10
11
12
13
ls /usr/share/cowsay/cows
apt.cow elephant-in-snake.cow luke-koala.cow stimpy.cow
bud-frogs.cow elephant.cow mech-and-cow.cow suse.cow
bunny.cow eyes.cow milk.cow three-eyes.cow
calvin.cow flaming-sheep.cow moofasa.cow turkey.cow
cheese.cow fox.cow moose.cow turtle.cow
cock.cow ghostbusters.cow pony-smaller.cow tux.cow
cower.cow gnu.cow pony.cow unipony-smaller.cow
daemon.cow hellokitty.cow ren.cow unipony.cow
default.cow kangaroo.cow sheep.cow vader-koala.cow
dragon-and-cow.cow kiss.cow skeleton.cow vader.cow
dragon.cow koala.cow snowman.cow www.cow
duck.cow kosh.cow stegosaurus.cow

如此一来,既然是随机问候,为什么不随机到底呢,索性小动物的形象也随机一下吧!

可以通过以下的 shell 指令获取到一个随机的小动物配置文件,并将其的名字作为参数传入 cowsay:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
❯ cow=`ls /usr/share/cowsay/cows | sort -R | tail -n 1`
echo abcdefg | cowsay -f ${cow%\.*}
_________
< abcdefg >
---------
\ (__)
\ /oo|
\ (_"_)*+++++++++*
//I#\\\\\\\\I\
I[I|I|||||I I `
I`I'///'' I I
I I I I
~ ~ ~ ~
Scowleton

最后来看看 lolcat。lolcat 的作用就简单很多,就是对终端输出的字符进行彩虹色的着色:

lolcat着色效果

整合后放入终端配置文件

经过以上的分析,我们可以通过管道符将以上三个软件组合起来使用,最终整合成这样一个流程:

1
2
3
4
# 获取一个随机小动物
cow=`ls /usr/share/cowsay/cows | sort -R | tail -n 1`
# 根据这个小动物形象输出随机文本
fortune | cowsay -f ${cow%\.*} | lolcat

将其填到终端配置文件,比如 .bashrc 或者 .zshrc(我是用的是 zsh,所以是 .zshrc),然后在之后的每次启动终端,在终端读取这个配置文件的时候,就会执行到这个命令,从而输出问候语。

连续开启三个终端,都是不同的问候

Author: SmallXeon
Link: https://hexo.chensmallx.top/2022/05/13/random-motd/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
一些推广链接
几个便宜量大的小✈场: FASTLINK, YToo, 论坛邀请注册: ,
便宜量大但是稳定性不足的VPS: Virmach, 价格略贵但好用的VPN: , ,