1
dorentus 2014-04-10 14:21:25 +08:00 1
lolcat 纯粹是为了搞颜色的
fortune 是输出一句箴言 cowsay 文本 会把文本放到动物的对话框内 中间那句 sed 是把 fortune 可能输出的、但是 lolcat 还是 cowsay 不太好显示的特殊字符删掉(这个我记不太清了……) 你要的效果,这样应该就可以了吧: cowsay `fortune -a -s | sed -E "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"` | lolcat -f |
2
dorentus 2014-04-10 14:22:56 +08:00 1
`fortune -a -s | sed -E "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"` 或者 $(fortune -a -s | sed -E "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"),是把里面的命令 fortune -a -s | sed -E "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" 的结果保存成一个字符串,于是 cowsay `#####` 就是直接把这个字符串拿来作参数了
等同于: TEXT=$(fortune -a -s | sed -E "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g") cowsay $TEXT | lolcat -f 然后 cowsay $TEXT 就是把 $TEXT 的内容放到框里,后面 | lolcat -f 就是把 cowsay 输出的内容传给 lolcat 变颜色。 |
3
dorentus 2014-04-10 14:32:45 +08:00 1
话说如果觉得太慢的话,就把 | lolcat -f 去掉吧,有时真的是感觉会很慢……
|
4
dorentus 2014-04-10 14:44:14 +08:00 1
其实最简单的 fortune | cowsay | lolcat 就可以(from: https://github.com/busyloop/lolcat)
我已经忘了为啥我那脚本最终变成那么复杂了…… |
5
zeroday OP @dorentus 原作者竟然献身回答,真的很惊喜。非常感想你的回答,答的真是太好了。
看到 TEXT=$(fortune -a -s | sed -E "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g") cowsay $TEXT | lolcat -f 也明白了,自己的错误。原来Bash shell给变量赋值时不能有空格。习惯了WEB代码,写Bash shell时习惯性地写上了 SaySomething = $(fortune -a -s | sed -E "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g") cowsay $SaySomething | lolcat -f 怪不得提示SaySomething不是可执行命令… |
6
dorentus 2014-04-10 16:24:03 +08:00
哈哈,加空格这习惯我也有,经常被 bash 坑……
|
7
meizhile 2014-04-10 19:52:23 +08:00 via Android
ps看起来莫名烦躁-_-||
|
8
dorentus 2014-04-11 23:47:29 +08:00 1
https://github.com/dorentus/mruby-lolcat-bin
把 lolcat gem 移植到 mruby 上了,现在编译后直接是一个可执行文件,不依赖 ruby 什么的 https://gist.github.com/dorentus/4689543#file-lolcat-banner-sh 这个脚本我也更新了一下,现在应该快多了…… |
9
dorentus 2014-04-12 00:56:23 +08:00
OS X 用 homebrew, brew install dorentus/tap/lolcat_mruby 直接可以装,装好后命令是 lolcat_m
然后还有 bug,lolcat_m /etc/hosts [OK]、lolcat_m /etc/hosts > /tmp/lol 会失败…… |
10
dorentus 2014-04-12 01:19:45 +08:00
bugfixed...
|
12
zeroday OP @dorentus 奇怪,是我的ruby版本(2.1.1)问题吗?
make install PREFIX=/usr/local/Cellar/lolcat_mruby/0.42.2 rake aborted! undefined method `exists?' for Dir:Class ./rakefile:39 make: *** [install] Error 1 |
13
zeroday OP @dorentus 发现一件有趣的事,brew install cowsay和gem install cowsay两个版本是不一样的。gem install cowsay生成的动物可以自动变换。
|
14
dorentus 2014-04-12 03:18:29 +08:00
这个错误我看看……按理说 ruby 1.8 没有 Dir.exists?,但是 ruby 2.1.1 应该有的啊……
gem install cowsay 装的那个是 ruby 写的,和 brew install cowsay 装的不是一个版本 https://github.com/PatrickTulskie/ruby_cowsay 还可以在 ruby 代码里面来调用…… |
16
dorentus 2014-04-12 03:38:08 +08:00
我作息时间一向很乱……
---- 上面那个问题,我估计是用 homebrew 装的时候,偶尔会切换成使用系统自带的 1.8 版的 ruby,而我的 makefile 里面就是直接写的 ruby,然后就出错了…… 我刚刚修复了一下 Rakefile,支持 ruby 1.8 了。你 brew update 然后再装试试,应该可以装了。 |
17
zeroday OP @dorentus 成功安装,我估计是我环境的问题,虽然安装了2.1.1版的ruby,但是实际上是切换成系统自带的1.8版的ruby,因为有时候启动终端时会提示如下错误:
/Library/Ruby/Gems/1.8/gems/cowsay-0.0.5/lib/cowsay/character/base.rb:20:in `template': #template should be subclassed (RuntimeError) from /Library/Ruby/Gems/1.8/gems/cowsay-0.0.5/lib/cowsay/character/base.rb:26:in `render_character' from /Library/Ruby/Gems/1.8/gems/cowsay-0.0.5/lib/cowsay/character/base.rb:16:in `say' from /Library/Ruby/Gems/1.8/gems/cowsay-0.0.5/lib/cowsay.rb:17:in `say' from /Library/Ruby/Gems/1.8/gems/cowsay-0.0.5/bin/cowsay:6 from /usr/bin/cowsay:19:in `load' from /usr/bin/cowsay:19 对了,我发现#lolcat-banner.sh `fortune -a -s | $cmd_sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" | $cmd_lolcat -f` 修改为才不出错 `fortune -a -s | $cmd_sed -E "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" | $cmd_lolcat -f` Linux下`sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"` Mac下`sed -E "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"` |
19
aiym 2014-06-14 02:58:01 +08:00
@dorentus 想请问一下#9#楼里面所说的“装好后命令是 lolcat_m”,为什么我在安装成功之后发现lolcat_m没有反应呢,但是lolcat命令是完好的。请问是不是后来又做了某些修改?重新alias了一下?(不过我看了一下代码貌似没有发现类似的--抱歉,因为不会ruby,更不了解mruby,所以可能问得比较弱。。)不过这样的话,确实比使用lolcat_m方便。还是要多谢!!!
但如果没有lolcat_m命令的话,那么源文件里面的这句就不需要了吧? cmd_lolcat="$(command -v lolcat_m)" || cmd_lolcat="$(command -v lolcat)" 话说用了一下这个最新版本的lolcat觉得没有什么速度方面的问题哈,是因为mruby的语言比较轻导致的么? |