程序员大都离不开终端(Terminal),之前我写过一个 macOS 效率系列,还有这篇文章都提到这个黑漆漆的窗口。
本文给大家介绍一下每次我的 Terminal 打开之后会展示的欢迎信息 motd。
一、简单静态文本
motd 是 Message of the Day 的缩写,大部分 Unix-like 系统都有这个 feature。原理很简单,就是在 shell login 之前一刻,把 /etc/motd
这个文件打印出来。macOS 的这部分实现在 system_cmds 里:
/*
* Display the contents of a file (such as /etc/motd).
*/
static int
motd(const char *motdfile)
{
sig_t oldint;
FILE *f;
int ch;
if ((f = fopen(motdfile, "r")) == NULL)
return (-1);
motdinterrupt = 0;
oldint = signal(SIGINT, sigint);
while ((ch = fgetc(f)) != EOF && !motdinterrupt)
putchar(ch);
signal(SIGINT, oldint);
if (ch != EOF || ferror(f)) {
fclose(f);
return (-1);
}
fclose(f);
return (0);
}
只要修改 /etc/motd
文件,往里面放你喜欢的文本,它就会自动打印出来啦。
比如说想要打印出 JUSTIN 的 ASCII ART 形式,那我们可以到这里把你想要打印的文本转成 ASCII Text,粘贴到 motd 文件即可。
二、天天都有彩虹新花样
如果要动态生成文本,带点小花样,最好来个 RGB 艺术呢?😂
motd 本身只是个纯文本,不支持执行 shell script,所以我们可以考虑在 ~/.profile
(zsh
用户可修改 ~/.zshrc
)里调用一个 shell script 来打印内容。
首先我们使用 FIGlet 把纯文本变成 ASCII Text:
brew install figlet
echo "JUSTIN" | figlet
figlet 可以选择多种字体,可以参考这里。
Font: banner3
## ## ####### #######
### ### ## ## ## ##
#### #### ## ## ## ##
## ### ## ## ## ## ##
## ## ## ## ## ##
## ## ## ## ## ##
## ## ####### #######
Font: isometric1
/_\ /\ \ /\
/::| | /::\ \ /::\
/:|:| | /:/:\ \ /:/:\
/:/|:|| /:/ :\ \ /:/ :\
/:/ |::::_\ /:// :__\ /:// :__
//~~/:/ / :\ \ /:/ / :\ \ /:/ /
/:/ / :\ /:/ / :\ /:/ /
/:/ / :/:/ / :/:/ /
/:/ / ::/ / ::/ /
// // //
然后我们再用 cowsay
把小牛加上去
brew install cowsay
echo "Hello World!" | cowsay
cowsay 默认是一头小牛,自带多种动物可以选择,比如来一头堕拉贡:
___________
< different >
-----------
\ / \ //\
\ |\___/| / \// \\
/0 0 \__ / // | \ \
/ / \/_/ // | \ \
@_^_@'/ \/_ // | \ \
//_^_/ \/_ // | \ \
( //) | \/// | \ \
( / /) _|_ / ) // | \ _\
( // /) '/,_ _ _/ ( ; -. | _ _\.-~ .-~~~^-.
(( / / )) ,-{ _ `-.|.-~-. .~ `.
(( // / )) '/\ / ~-. _ .-~ .-~^-. \
(( /// )) `. { } / \ \
(( / )) .----~-.\ \-' .~ \ `. \^-.
///.----..> \ _ -~ `. ^-` ^-_
///-._ _ _ _ _ _ _}^ - - - - ~ ~-- ,.-~
/.-~
还可以选择是 cowsay
还是 cowthink
。我的做法是随机生成一只动物:
cowsay -f $(cd /opt/homebrew/Cellar/cowsay/3.04_1/share/cows && ls *.cow | shuf -n1)
中间的 cows
path 需要自己找出来,只选 *.cow
是因为 .pm
的 cowfile 会解析失败。另外用到一个随机 shuffle 的命令 shuf
需要额外安装 coreutils
brew install coreutils
效果还不错,但是 RGB 彩虹效果不能妹有啊,用 lolcat
整起来:
brew install lolcat
echo "Hello World" | cowsay | lolcat
很好,我们再加点动画:
echo "Hello World" | cowsay | lolcat --animate -s 1000
Woohoo! 不过每次都显示 "Hello World!" 也太单调了,再加一个 fortune
,天天都有不同的 fortune cookie:
fortune | cowsay | lolcat --animate -s 1000
最终效果如下:
我创建了一个 gist,有兴趣的朋友可以参考看一下。