bash里的I/O重定向是很奇妙的事情,一般常用的有>, >>, 2>&1, &>, | 等常用重定向技巧。还有一些很高级的重定向技巧,比如Advanced Bash-Scripting Guide里的Chapter 16. I/O Redirection或者是这篇I/O重定向 详解及例子里介绍的高级技巧,我看了后简直要晕掉。
而且,一直没搞明白下面两个命令为什么会有不同?(本例来自于上面提到的ABSG,印象里某公司的笔试题里有让你指出其差别):
ls -yz >> command.log 2>&1 ls -yz 2>&1 >> command.log
xargs和tee也是和重定向密切相关的两个shell命令。
xargs的官方解释是"build and execute command lines from standard input",理解起来比较绕。我举个例子,假设当前目录有个文件 aaa,其中内容为"this is aaa",执行命令
find . -name "aaa" 2>/dev/null | cat
的结果为
./aaa
而执行命令
find . -name "aaa" 2>/dev/null | xargs cat
的结果为
this is aaa
本例可以解释为,前者只是把管道之前的命令的标准输出作为后者的标准输入,而xargs是把管道之前的命令的标准输出的内容逐行作为参数和xargs之后的命令一起组装成一条条完整的执行语句。
当你希望把标准输出重定向到文件,而又同时能在终端上看到屏幕输出时,tee可以发挥作用了。比如
cat aaa | tee afile和cat aaa > afile两个命令得到的afile是一样的,不过前一命令能同时在终端看到aaa这个文件的内容。
最后,提一下script这个命令。从键入script开始,你的所有终端显示内容将被输入到一个文件里(默认为typescript),直至exit或者Ctrl+D退出script环境。这在希望记录大段输入以及输出内容时很有用。
19/03: opera试用
256M 内存大概是有一点小了,我用Mozilla Firefox有时感觉反应有一些慢。都说Opera比较快,去下了一个试了试。 先是下了个shared-qt的版本,scim死活无法激活。网上有人说static-qt版本可以,下载来一试。还果真如此。中文输入的问题算是搞定了。
用了几天,总体感觉还可以,top显示出来的内存占用量比Mozilla Firefox稍小。快捷键也比较丰富。书签可以定制nickname,但是没有Firefox使用 %s 来替代关键字的功能(内置的搜索引擎的可以使用这个功能)。在没有对 Debian 的字体作特别美化的情况下显示的中文字体在我看来要比Firefox下好看一些。还没有发掘到与livehttpheader, developer功能类似的插件。有一点也比较奇怪,在网速比较慢的时候,有时莫名其妙的打不开任何网页,我没有耐心等待,只好重新启动,让它自个儿恢复session。在使用过程中,也crash过几回,不过能记住session还真是个不错的功能
21/02: gnuplot是个好东西
自从 river 爱上了我强烈推荐的 LaTeX 后,我便变成了很多工具的小白。表格的题注和表格内容之间的距离需要调整,OK,我去查方法;他用illustrator/acrobat/gsview等等搞出来的 eps 图片不好用,使用 ps2eps 轻松搞定。一些小伎俩,非常有助于树立我的形象:)
这回,要根据一堆数据画出一些比较曲线。我立即想到了 gnuplot,虽然我之前也没有用过,但久仰大名。安装,运行,啊,是个命令行的东西?找到手册,学习几个小时,画图没有问题了:
画图的时候要使用到 plot 或者splot命令,前者画2D后者画3D。gnuplot > plot sin(x) 画函数 sin(x) gnuplot > plot ‘test.txt’ using 1:4 title ‘title a’ smooth csplines, \ ‘’ using 1:5 title ‘title b’ smooth csplines 使用test.txt中的第一列和第四列画一条平滑的曲线,标记为 title a, 使用第一列和第五列画一条标记为title b的平滑曲线 gnuplot > f(x) = x gnuplot > plot ‘test.txt’ using 4:5 with points pt 6, f(x) 比较第4列和第5列和函数f(x)=x的误差 gnuplot > set title “the title of the graph” gnuplot > set xlabel “the label for x axis” gnuplot > set ylabel “the label for y axis” 设置图片标识,X轴,Y轴标识。控制gnuplot输出终端(格式)的是terminal属性。默认的terminal是x11,也就是画到屏幕上。
gnuplot > set terminal postscript eps 设置输出格式为 eps,得到的图片可以方便的插入 LaTeX 文档 gnuplot > set output "test.eps" 设置输出文件名。然后再 plot 就输出到 test.eps 里了。gnuplot 支持的输出格式非常多,什么 latex, xfig, png等等。
同许多 *nix 下的工具一样,学习 gnuplot 需要花费一定的时间,但是一旦学会了你也许就受用终身。
ps, 为了画一条竖直的直线,在网上收到一个非常棒的教程:gnuplot tips(not so Frequently Asked Questions),配合gnuplot的手册,相信很快就能学会。