在macOS/Linux中使用一言(Hitokoto)自定义命令行欢迎文本

最近发现了一言,一个非常棒的收录各种句子的网站.
https://hitokoto.cn
在研究它的API时突发奇想: “能不能让命令行的 Welcome message 显示一条一言呢?”
说干就干.

(我是在macOS下操作的; Linux同理.)

获取一言数据

因为我还不会写爬虫, 我用了一个本地一言源, 一共有3386个句子, 感觉够用了.
https://github.com/kfangf/hitokoto
(注意这个数字,下面会用到)
然后常规操作,wget里面的hitokoto.txt.

尝试显示一条一言

现在问题来了, 我想每次都从hitokoto.txt里获取随机获取一行文本.
你可能已经想到了, 我们借助$RANDOM变量,用

1
$RANDOM%3386+1

表示随机的一行(的行号). (3386就代表该文件的行数)
那么怎么打印这一行? 用headtail.

1
$ head -$(($RANDOM%3386+1)) ~/hitokoto.txt|tail -1

你也可以把这行命令保存成alias. 比如, 我的alias就叫hitokoto.

什么是 /etc/motd 啊?

那么怎么让它在每次终端启动时显示呢? 这里就要用到/etc/motd(Message Of ToDay, “布告栏信息”) 这个文件了(划重点).

你大可以编辑/etc/motd这个文件来显示你想要的文字.

注意: macOS下默认是没有这个文件的 – 你得自己创建一个.

比如你可以实现这样的效果: (下面第二行开始就是你的自定义文本)

1
2
3
Last login: Tue Feb 12 10:52:21 on ttys003
*nix Saikou!
$

将一言文本写入 /etc/motd

这并不难, 只要修改 .zshrc(或.bashrc.bash_profile), 添加这一行:

1
echo "\033[34m$(hitokoto)\033[0m" > /etc/motd

就可以在每次终端启动时将hitokoto内容写入/etc/motd了. (那个\033[34m\033[0m其实代表文本颜色(这里是Cyan), 不爽或console不支持的话可以去掉.)

如果你没加alias的话也可以这么写: (朴素写法)

1
echo "$(head -$(($RANDOM%3386+1)) ~/hitokoto.txt|tail -1)" > /etc/motd

/etc/motd 的权限问题
zsh: permission denied: /etc/motd

1
sudo chmod 666 /etc/motd #正解

到这里我们就完工了. 当然你也可以照着加一些别的东西. 比如你可以在上一行命令的前面写下:

1
echo "Welcome, my Master, known as\033[33m $(whoami).\033[0m" > /etc/motd

注意如果要添加多行motd内容的话第一个echo一定要用>, 其余的echo一定要用>>. 这是因为我们要用> 覆盖文件的内容, 然后才用>>一行一行写入文件.

#EOF.