在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就代表该文件的行数)
那么怎么打印这一行? 用head
和tail
.
1 | head -$(($RANDOM%3386+1)) ~/hitokoto.txt|tail -1 |
你也可以把这行命令保存成alias
. 比如, 我的alias
就叫hitokoto.
什么是 /etc/motd 啊?
那么怎么让它在每次终端启动时显示呢? 这里就要用到/etc/motd
(Message Of ToDay, “布告栏信息”) 这个文件了(划重点).
你大可以编辑/etc/motd这个文件来显示你想要的文字.
注意: macOS下默认是没有这个文件的 – 你得自己创建一个.
比如你可以实现这样的效果: (下面第二行开始就是你的自定义文本)
1 | Last login: Tue Feb 12 10:52:21 on ttys003 |
将一言文本写入 /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.