<?xml version="1.0" encoding="iso-8859-1"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en"> 
<title>WestTwoFlag</title> 
<link rel="alternate" type="text/html" href="http://guocongbin.iblog.com" /> 
	 
	<modified>2008-02-10T10:25:45+0300</modified> 
<tagline>高龄IT民工@西二旗</tagline> 
<generator url="http://www.iblog.com/">iBlog</generator> 
 
<copyright>Copyright (c) guocongbin</copyright> 
  
  
   
 
 <entry> 
 <id>tag:www.iblog.com,2008-02-10:492402</id>
 <title>Draw on Web</title> 
 <link rel="alternate" type="text/html" href="http://guocongbin.iblog.com/post/1964/492402" /> 
  
 <modified>2008-02-10T10:25:45+0300</modified> 
 <issued>2008-02-10T10:25:45+0300</issued> 
 <created>2008-02-10T10:25:45+0300</created> 
 <summary type="text/plain">现在的web上面的应用真是越来越多，越来越炫啊。 
一个是best4c，可以绘制各种图形（流程图，UML图，地图等等）。  ...</summary> 
 <author> 
  
 <name>guocongbin</name> 
 <url>http://guocongbin.iblog.com</url> 
 <email>guocongbin@gmail.com</email> 
</author> 
<dc:subject>
乱弹 
</dc:subject> 
 <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://guocongbin.iblog.com"> 
 现在的web上面的应用真是越来越多，越来越炫啊。&lt;p&gt;
一个是best4c，可以绘制各种图形（流程图，UML图，地图等等）。&lt;p&gt;
另外一个则是IBM其下的一个网站www.many-eyes.com，主要是提供统计图形的绘制。&lt;p&gt;下面的这个图是偶用best4c画出来的偶未来的房子的效果图，画的不是很好，不过还是可以激起偶对未来幸福生活的向往。&lt;P&gt;
&lt;img src=&quot;http://www.best4c.com/Best4cUserFiles/20080210/76636_1202657533042.jpg&quot; alt=&quot;my drawing&quot; /&gt;&lt;P&gt;
下面的这个图形就是通过many-eyes绘制出来的。偶胡乱写了几个城市（省份）的名称，然后编了几个数据作为输入，many-eyes就可以提供一个中国地图来显示我的这些数据了。&lt;p&gt;
&lt;a href=&quot;http://services.alphaworks.ibm.com/manyeyes/view/ScwMDMsOtha6G9%7EUOKNEM2%7E&quot; style=&quot;margin: 0pt; padding: 0pt;&quot;&gt;&lt;img src=&quot;http://services.alphaworks.ibm.com/manyeyes/static-resources/snapshot/89ade5ae183d8f28011841959a8002d2.jpeg&quot; id=&quot;blogThisImgSmall&quot; style=&quot;border-style: solid solid none; border-color: rgb(175, 117, 93) rgb(175, 117, 93) -moz-use-text-color; border-width: 1px 1px 0pt; margin: 0pt; padding: 0pt;&quot; alt=&quot;&quot;&gt;&lt;img style=&quot;border: 0pt none ; margin: 0pt; padding: 0pt; display: block; position: relative; top: -5px;&quot; src=&quot;http://services.alphaworks.ibm.com/manyeyes/images2/blog_this_caption.jpg&quot; id=&quot;Any_0&quot;&gt;&lt;/a&gt;
&lt;p&gt;
当然，同样的数据也可以使用其他的形式表示。下面的这个就是使用另外一种形式显示的。&lt;br&gt;
&lt;a href=&quot;http://services.alphaworks.ibm.com/manyeyes/view/ScwMDMsOtha6p9UZm3OEM2%7E&quot; style=&quot;margin: 0pt; padding: 0pt;&quot;&gt;&lt;img src=&quot;http://services.alphaworks.ibm.com/manyeyes/static-resources/snapshot/89ade5ae183d8f28011841a1729602f5.jpeg&quot; id=&quot;blogThisImgSmall&quot; style=&quot;border-style: solid solid none; border-color: rgb(175, 117, 93) rgb(175, 117, 93) -moz-use-text-color; border-width: 1px 1px 0pt; margin: 0pt; padding: 0pt;&quot; alt=&quot;&quot;&gt;&lt;img style=&quot;border: 0pt none ; margin: 0pt; padding: 0pt; display: block; position: relative; top: -5px;&quot; src=&quot;http://services.alphaworks.ibm.com/manyeyes/images2/blog_this_caption.jpg&quot; id=&quot;Any_0&quot;&gt;&lt;/a&gt;
&lt;p&gt;
Many-eyes还提供了一些其他的图形。比如word tree和text cloud。偶觉得这个text cloud比较有意思。它就是首先统计一篇文章中的词频，然后使用不同的大小来显示这些词。词频越高的词，字号就越大；反之则越小。&lt;P&gt;
下面就是一个例子，输入的数据是偶的&lt;a href=&quot;http://guocongbin.iblog.com/post/1964/489849&quot;&gt;一篇文章&lt;/a&gt;的内容。&lt;P&gt;
&lt;a href=&quot;http://services.alphaworks.ibm.com/manyeyes/view/ScwMDMsOtha6%7EA%7E4oJOEM2%7E&quot; style=&quot;margin: 0pt; padding: 0pt;&quot;&gt;&lt;img src=&quot;http://services.alphaworks.ibm.com/manyeyes/static-resources/snapshot/89ade5ae183d8f28011841a574180300.jpeg&quot; id=&quot;blogThisImgSmall&quot; style=&quot;border-style: solid solid none; border-color: rgb(175, 117, 93) rgb(175, 117, 93) -moz-use-text-color; border-width: 1px 1px 0pt; margin: 0pt; padding: 0pt;&quot; alt=&quot;&quot;&gt;&lt;img style=&quot;border: 0pt none ; margin: 0pt; padding: 0pt; display: block; position: relative; top: -5px;&quot; src=&quot;http://services.alphaworks.ibm.com/manyeyes/images2/blog_this_caption.jpg&quot; id=&quot;Any_1&quot;&gt;&lt;/a&gt; 
</content> 
</entry> 

  
 
  
   
 
 <entry> 
 <id>tag:www.iblog.com,2008-02-01:489339</id>
 <title>少林足球:)</title> 
 <link rel="alternate" type="text/html" href="http://guocongbin.iblog.com/post/1964/489339" /> 
  
 <modified>2008-02-01T23:56:40+0300</modified> 
 <issued>2008-02-01T23:56:40+0300</issued> 
 <created>2008-02-01T23:56:40+0300</created> 
 <summary type="text/plain"> 只能说这帮人太强悍了,周星星比他们差太远了          </summary> 
 <author> 
  
 <name>guocongbin</name> 
 <url>http://guocongbin.iblog.com</url> 
 <email>guocongbin@gmail.com</email> 
</author> 
<dc:subject>
乱弹 
football 
</dc:subject> 
 <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://guocongbin.iblog.com"> 
 &lt;p&gt;只能说这帮人太强悍了,周星星比他们差太远了&lt;img alt=&quot;::)&quot; src=&quot;http://www.iblog.com/plugins/smileys/icons/iblog_2/icon1.gif&quot; /&gt;&lt;/p&gt;&lt;object width=&quot;425&quot; height=&quot;373&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/jWk9VJ3wVX8&amp;rel=1&amp;border=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/jWk9VJ3wVX8&amp;rel=1&amp;border=1&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot; width=&quot;425&quot; height=&quot;373&quot;&gt;&lt;/embed&gt;&lt;/object&gt; 
</content> 
</entry> 

  
 
  
   
 
 <entry> 
 <id>tag:www.iblog.com,2008-01-28:487618</id>
 <title>叹为观止，二维的屏幕变成了看三维世界的窗户</title> 
 <link rel="alternate" type="text/html" href="http://guocongbin.iblog.com/post/1964/487618" /> 
  
 <modified>2008-01-28T10:23:25+0300</modified> 
 <issued>2008-01-28T10:23:25+0300</issued> 
 <created>2008-01-28T10:23:25+0300</created> 
 <summary type="text/plain">这段视频里面演示的demo真是让人难忘啊。 
如果head ...</summary> 
 <author> 
  
 <name>guocongbin</name> 
 <url>http://guocongbin.iblog.com</url> 
 <email>guocongbin@gmail.com</email> 
</author> 
<dc:subject>
wii 
game 
head-tracking 
</dc:subject> 
 <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://guocongbin.iblog.com"> 
 这段视频里面演示的demo真是让人难忘啊。&lt;p&gt;
如果head tracking能够应用于游戏之中，那种现场感就真的太令人震撼了。想象一下，CS里面一颗一颗呼啸而来的流弹，极品中车窗外的景色，一切都会随着你的头部的移动而相应变化。此时此刻，小小的屏幕，真的成为了看世界的一面窗户。&lt;p&gt;&lt;object width=&quot;425&quot; height=&quot;373&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/Jd3-eiid-Uw&amp;rel=1&amp;border=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/Jd3-eiid-Uw&amp;rel=1&amp;border=1&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot; width=&quot;425&quot; height=&quot;373&quot;&gt;&lt;/embed&gt;&lt;/object&gt; 
</content> 
</entry> 

  
 
  
   
 
 <entry> 
 <id>tag:www.iblog.com,2008-01-23:485810</id>
 <title>Help me keep the shell people alive. :-)</title> 
 <link rel="alternate" type="text/html" href="http://guocongbin.iblog.com/post/1964/485810" /> 
  
 <modified>2008-01-23T09:51:52+0300</modified> 
 <issued>2008-01-23T09:51:52+0300</issued> 
 <created>2008-01-23T09:51:52+0300</created> 
 <summary type="text/plain"> 这是 slashdot上面的一篇奇文 ，与君共享之    There is a sad truth to the world today. I am part of a dying breed of people known as &amp;quot;shell users.&amp;quot; We are an old-fashioned ...</summary> 
 <author> 
  
 <name>guocongbin</name> 
 <url>http://guocongbin.iblog.com</url> 
 <email>guocongbin@gmail.com</email> 
</author> 
<dc:subject>
乱弹 
Joke 
life 
</dc:subject> 
 <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://guocongbin.iblog.com"> 
 &lt;p&gt;这是&lt;a href=&quot;http://www.craigslist.org/about/best/nyc/485967082.html&quot;&gt;slashdot上面的一篇奇文&lt;/a&gt;，与君共享之&lt;img src=&quot;http://www.iblog.com/js/tinymce/plugins/emotions/images/smiley-smile.gif&quot; border=&quot;0&quot; alt=&quot;Smile&quot; title=&quot;Smile&quot; /&gt; &lt;/p&gt;&lt;p&gt;There is a sad truth to the world today. I am part of a dying breed of people known as &amp;quot;shell users.&amp;quot; We are an old-fashioned bunch, preferring the warm glow of a green screen full of text over the cold blockiness of a graphical interface. We use ssh, scp, and even occassionally ftp. Back in the days before high-speed connections (&amp;quot;broadband&amp;quot;), we would dial up during off-hours to avoid being slammed with huge phone bills. The whole &amp;quot;Microsoft Windows&amp;quot; fad will fade away sooner or later, but in the interim, our kind is facing extinction. &lt;br /&gt;  &lt;br /&gt;Because there are fewer and fewer of us, I must help keep our lineage alive. I am looking for someone to help me do this. I need a woman (obviously) who is willing to raise a child with me in the method of Unix. Our child will be introduced to computers at a young age, and will be setting emacs mode before any other child can even read. I earn a sufficient income to support a family in modest comfort. Other than the fact our child will be bright, text-based and sarcastic, we will otherwise be a normal family. We will even go to Disney World and see Mickey Mouse. &lt;br /&gt;  &lt;br /&gt;So, if you are a woman between the ages of 23 and 43 who is ready to raise a child in the way of the shell, let me know so we can begin the process. (If you are ready to raise more than one child, even better.) &lt;br /&gt;  &lt;br /&gt; PS - yes, this is for real. Given the right person, I would obviously propose before we ... call fork(). &lt;br /&gt;PPS - I only set emacs mode for my ksh session. I only edit files using vi. Just wanted to clear that up. And I&amp;#39;m looking to raise the child(ren) as a dedicated couple, so if you aren&amp;#39;t interested in being married, you may wish to select() a different posting. &lt;br /&gt; &lt;br /&gt;N.B. - on the issue of relocation. I live in a place where my income/expense ratio is proper (i.e., greater than 2:1). I&amp;#39;m willing to live anywhere in the world where this remains true. I&amp;#39;ve been to much of the country as well as foreign nations. There are no limits to where I will live *so long as the job market for unix admins is robust enough to be sustainable.* And yes, I am interested in a strictly monogamous situation. I&amp;#39;ve been known to actually turn down offers of &amp;quot;two chicks at the same time.&amp;quot; &lt;/p&gt;&lt;p&gt;在众多回帖中，也有很多很搞笑的&lt;/p&gt;&lt;hr width=&quot;100%&quot; size=&quot;2&quot; /&gt;&lt;p&gt;grep -i &amp;#39;single white female&amp;#39; /usr2/home/women/*&lt;br /&gt;grep: /usr2/home/women/*: No such file or directory&lt;/p&gt;&lt;hr width=&quot;100%&quot; size=&quot;2&quot; /&gt;&lt;p&gt;&amp;nbsp;grep -i &amp;#39;asian schoolgirl&amp;#39; /home/me/Desktop/women/*&lt;br /&gt;*error insufficient memory&lt;/p&gt;&lt;hr width=&quot;100%&quot; size=&quot;2&quot; /&gt;&lt;p&gt;Just a heads-up, it&amp;#39;s generally considered improper to seek a wife from one&amp;#39;s own home.&lt;br /&gt;  Try /pub.&lt;/p&gt;&lt;hr width=&quot;100%&quot; size=&quot;2&quot; /&gt;&lt;p&gt;Well, essentially he is looking for a device..... something he can input sperm into and get a baby as output, so probably /dev would be the best place to look.  Though I don&amp;#39;t know how many women have usb 2.0 compatible vaginas.&lt;/p&gt;&lt;hr width=&quot;100%&quot; size=&quot;2&quot; /&gt;&lt;p&gt;ohtani@darkstar:~$ man woman&lt;br /&gt;Segmentation fault (core dumped)&lt;/p&gt;&lt;hr width=&quot;100%&quot; size=&quot;2&quot; /&gt;&lt;p&gt;root@SoupDragon:~/# man woman&lt;br /&gt;No manual entry for woman&lt;/p&gt;&lt;hr width=&quot;100%&quot; size=&quot;2&quot; /&gt;&lt;p&gt;who &amp;amp;&amp;amp; gawk &amp;amp;&amp;amp; uname &amp;amp;&amp;amp; talk &amp;amp;&amp;amp; date &amp;amp;&amp;amp; wine &amp;amp;&amp;amp; touch &amp;amp;&amp;amp; unzip &amp;amp;&amp;amp; strip &amp;amp;&amp;amp; touch &amp;amp;&amp;amp; finger &amp;amp;&amp;amp; mount &amp;amp;&amp;amp; fsck &amp;amp;&amp;amp; more &amp;amp;&amp;amp; yes; yes; more; yes; umount &amp;amp;&amp;amp; make clean &amp;amp;&amp;amp; sleep&lt;br /&gt;9 months later, fork() and spawn()&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt; 
</content> 
</entry> 

  
 
  
   
 
 <entry> 
 <id>tag:www.iblog.com,2008-01-22:485384</id>
 <title>在iblog里面玩代码的语法高亮</title> 
 <link rel="alternate" type="text/html" href="http://guocongbin.iblog.com/post/1964/485384" /> 
  
 <modified>2008-01-22T11:05:13+0300</modified> 
 <issued>2008-01-22T11:05:13+0300</issued> 
 <created>2008-01-22T11:05:13+0300</created> 
 <summary type="text/plain"> ...</summary> 
 <author> 
  
 <name>guocongbin</name> 
 <url>http://guocongbin.iblog.com</url> 
 <email>guocongbin@gmail.com</email> 
</author> 
<dc:subject>
乱弹 
</dc:subject> 
 <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://guocongbin.iblog.com"> 
 &lt;p&gt;作为一个技术为主的blog，大量的代码肯定是有的。但是这个iblog默认对代码没有什么支持。贴代码不是很方便，而且贴出来的代码也是和其他的文字没有啥区别&lt;img src=&quot;http://www.iblog.com/js/tinymce/plugins/emotions/images/smiley-frown.gif&quot; border=&quot;0&quot; alt=&quot;Frown&quot; title=&quot;Frown&quot; /&gt;。&lt;/p&gt;&lt;p&gt;但是我们可以发现其他的很多blog都可以高亮显示代码的，看起来还是很漂亮的。那么如何在iblog里面是代码也可以五颜六色呢？ &lt;/p&gt;&lt;p&gt;google在这里给我们帮了个忙，它推出了一个轻型的代码格式化脚本。大家可以到&lt;a href=&quot;http://code.google.com/p/google-code-prettify/&quot;&gt;这里&lt;/a&gt;来访问其主页。这个东东的使用方法也是很简单，只需要如下的几步。&lt;/p&gt;&lt;p&gt;首先要下载google提供的文件，主要就是一个js文件和一个css文件。这个js文件需要上传到iblog。然后大家一定要确定这个文件的真实的url， 例如&lt;a href=&quot;http://guocongbin.iblog.com/get/1964/prettify.js&quot;&gt;http://guocongbin.iblog.com/get/1964/prettify.js&lt;/a&gt;&lt;/p&gt;&lt;p&gt;然后大家要进入到iblog的控制中心，编辑你的模板。&lt;/p&gt;&lt;p&gt;所要编辑的第一个文件就是css的文件。每个模板都有一个css文件，我们需要将google提供的哪个css文件的内容添加到iblog的css文件中。而且大家可以根据自己的喜好来修改样式。&lt;/p&gt;&lt;p&gt;最后一步就是修改header.template文件。需要添加下面的一行&lt;/p&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;span class=&quot;pun&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt; &lt;/span&gt;&lt;span class=&quot;atn&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;atv&quot;&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt; &lt;/span&gt;&lt;span class=&quot;atn&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;atv&quot;&gt;&amp;quot;prettify.js&amp;quot;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;然后就是修改body的属性，改成这样&lt;/p&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;body onload=&amp;quot;prettyPrint()&amp;quot;&amp;gt;&lt;/pre&gt;&lt;p&gt;这样就大功告成了。当在blog中插入代码的时候，只需要使用html方式编辑一下，使用pre标签将插入的代码包围起来，就可以实现代码高亮的效果了&lt;img src=&quot;http://www.iblog.com/js/tinymce/plugins/emotions/images/smiley-wink.gif&quot; border=&quot;0&quot; alt=&quot;Wink&quot; title=&quot;Wink&quot; /&gt;&lt;/p&gt;下面的这个就是一个例子&lt;pre class=&quot;prettyprint&quot;&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;    char * str = &amp;quot;hello world&amp;quot;;&lt;br /&gt;    printf (str);&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;/pre&gt; 
</content> 
</entry> 

  
 
  
   
 
 <entry> 
 <id>tag:www.iblog.com,2008-01-22:485287</id>
 <title>在bash中隐藏你的命令历史</title> 
 <link rel="alternate" type="text/html" href="http://guocongbin.iblog.com/post/1964/485287" /> 
  
 <modified>2008-01-22T06:27:32+0300</modified> 
 <issued>2008-01-22T06:27:32+0300</issued> 
 <created>2008-01-22T06:27:32+0300</created> 
 <summary type="text/plain"> 命令历史（history命令，或~/.bash_history文件）的功能主要是使用户避免重复输入很长的命令。但是每个铜板都有两面 ...</summary> 
 <author> 
  
 <name>guocongbin</name> 
 <url>http://guocongbin.iblog.com</url> 
 <email>guocongbin@gmail.com</email> 
</author> 
<dc:subject>
Unix 
Shell 
Linux 
bash 
</dc:subject> 
 <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://guocongbin.iblog.com"> 
 &lt;p&gt;命令历史（history命令，或~/.bash_history文件）的功能主要是使用户避免重复输入很长的命令。但是每个铜板都有两面&lt;img src=&quot;http://www.iblog.com/js/tinymce/plugins/emotions/images/smiley-smile.gif&quot; border=&quot;0&quot; alt=&quot;Smile&quot; title=&quot;Smile&quot; /&gt;，命令历史由于是明文保存，所以如何你在bash的命令行中输入了一些特殊的重要的信息，那么这些信息就很可能被其他人轻而易举的获取。&lt;/p&gt;&lt;p&gt;命令历史的另外的一个问题是，我们使用频率最高的命令并不是我们最希望保存下来的命令。什么命令使用频率最高？无非是ls, cd, who, ps等等。保存这些命令一点价值都没有。占用一些磁盘空间倒是小事，他们会把我们真正想要保持的命令挤出.bash_history文件才是大事。&lt;/p&gt;&lt;p&gt;那么，如何是好？&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;bash有两个环境变量可以控制命令历史功能的行为。&lt;/p&gt;&lt;pre&gt;1. HISTCONTROL &lt;br /&gt;2. HISTIGNORE&lt;/pre&gt; &lt;p&gt;&amp;nbsp;具体含义，大家自己google去。 &lt;/p&gt;&lt;p&gt;只要利用这两个变量，如此这般，就可以避免上面提及的两个问题。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class=&quot;prettyprint&quot;&gt;export HISTCONTROL=ignoreboth&lt;br /&gt;export HISTIGNORE=&amp;quot;&amp;amp;:ls:[bf]g:exit&amp;quot;&lt;/pre&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;导出环境变量之后，只要我们在需要保密的命令前面加上一个空格，则这个命令就不会被记录下来&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;$ ./somecommand username password&lt;/pre&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;另外那些ls，bg，fg，exit之类的命令也再也不会被记录了。&lt;img src=&quot;http://www.iblog.com/js/tinymce/plugins/emotions/images/smiley-cool.gif&quot; border=&quot;0&quot; alt=&quot;Cool&quot; title=&quot;Cool&quot; /&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt; 
</content> 
</entry> 

  
 
  
   
 
 <entry> 
 <id>tag:www.iblog.com,2008-01-19:484407</id>
 <title>We Are the Champions, 我们都是昌平人</title> 
 <link rel="alternate" type="text/html" href="http://guocongbin.iblog.com/post/1964/484407" /> 
  
 <modified>2008-01-19T22:12:44+0300</modified> 
 <issued>2008-01-19T22:12:44+0300</issued> 
 <created>2008-01-19T22:12:44+0300</created> 
 <summary type="text/plain"> 虽然18m的春节晚会不算质量上乘，但是好在中了个三等奖，了胜于无，也算不虚此行。 ...</summary> 
 <author> 
  
 <name>guocongbin</name> 
 <url>http://guocongbin.iblog.com</url> 
 <email>guocongbin@gmail.com</email> 
</author> 
<dc:subject>
乱弹 
Joke 
life 
</dc:subject> 
 <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://guocongbin.iblog.com"> 
 &lt;p&gt;虽然18m的春节晚会不算质量上乘，但是好在中了个三等奖，了胜于无，也算不虚此行。 &lt;/p&gt;08年开始了，很多事情要去做。人成熟之后，想再次回到学生年代的那种无忧无虑（除了考试）已经是不可能了。人生的轨迹和其他人也没有什么两样。意气风发的时候的那种气概所剩无几啊。精彩的人生正是因为达不到，所以才更被人们所向往。 
</content> 
</entry> 

  
 
  
   
 
 <entry> 
 <id>tag:www.iblog.com,2008-01-09:476715</id>
 <title>Working Productively in Bash’s Vi Command Line Editing Mode (with Cheat Sheet)</title> 
 <link rel="alternate" type="text/html" href="http://guocongbin.iblog.com/post/1964/476715" /> 
  
 <modified>2008-01-09T09:49:38+0300</modified> 
 <issued>2008-01-09T09:49:38+0300</issued> 
 <created>2008-01-09T09:49:38+0300</created> 
 <summary type="text/plain"> 转载自http://www.catonmat.net/blog/bash-vi-editing-mode-cheat-sheet/  &amp;nbsp;  &amp;nbsp;  Bash provides two modes for command line editing -  emacs  and   vi . Emacs editing mode is the default ...</summary> 
 <author> 
  
 <name>guocongbin</name> 
 <url>http://guocongbin.iblog.com</url> 
 <email>guocongbin@gmail.com</email> 
</author> 
<dc:subject>
VIM 
</dc:subject> 
 <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://guocongbin.iblog.com"> 
 &lt;p&gt;转载自http://www.catonmat.net/blog/bash-vi-editing-mode-cheat-sheet/&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Bash provides two modes for command line editing - &lt;strong&gt;emacs&lt;/strong&gt; and  &lt;strong&gt;vi&lt;/strong&gt;. Emacs editing mode is the default and I already wrote an &lt;a href=&quot;http://www.catonmat.net/blog/bash-emacs-editing-mode-cheat-sheet/&quot;&gt;article  and created a cheat sheet for this mode&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;This time I am going to introduce you to bash&amp;rsquo;s &lt;strong&gt;vi editing  mode&lt;/strong&gt; and give out a detailed cheat sheet with the default keyboard  mappings for this mode.&lt;/p&gt; &lt;p&gt;The difference between the two modes is what command each key combination (or  key) gets bound to. You may inspect your current keyboard mappings with bash&amp;rsquo;s  built in &lt;strong&gt;bind&lt;/strong&gt; command:&lt;/p&gt;&lt;pre&gt;$ bind -P&lt;br /&gt;&lt;br /&gt;abort can be found on &amp;quot;C-g&amp;quot;, &amp;quot;C-xC-g&amp;quot;, &amp;quot;M-C-g&amp;quot;.&lt;br /&gt;accept-line can be found on &amp;quot;C-j&amp;quot;, &amp;quot;C-m&amp;quot;.&lt;br /&gt;alias-expand-line is not bound to any keys&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;To get into the &lt;strong&gt;vi editing mode&lt;/strong&gt; type&lt;/p&gt;&lt;pre&gt;$ set -o vi&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;in your bash shell (to switch back to emacs editing mode, type &lt;strong&gt;set -o  emacs&lt;/strong&gt;).&lt;/p&gt; &lt;p&gt;If you are used to a vi text editor you will feel yourself at home. &lt;/p&gt; &lt;p&gt;The editing happens in two modes - &lt;strong&gt;command mode&lt;/strong&gt; and  &lt;strong&gt;insert mode&lt;/strong&gt;. In insert mode everything you type gets output to  the terminal, but in the command mode the keys are used for various  commands.&lt;/p&gt; &lt;p&gt;Here are a few examples with screenshots to illustrate the &lt;strong&gt;vi editing  mode&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Let &amp;lsquo;&lt;strong&gt;[i]&lt;/strong&gt;&amp;lsquo; be the position of cursor in insert mode in all  the examples and &amp;lsquo;&lt;strong&gt;[c]&lt;/strong&gt;&amp;lsquo; be the position of cursor in command  mode.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Examples&lt;/strong&gt;:&lt;/p&gt; &lt;p&gt;Once you have changed the readline editing mode to vi (by typing &lt;strong&gt;set  -o vi&lt;/strong&gt;), you will be working in &lt;strong&gt;insert mode&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;The example will be performed on this command:&lt;/p&gt;&lt;pre&gt;$ echo arg1 arg2 arg3 arg4&lt;strong&gt;[i]&lt;/strong&gt; &lt;/pre&gt; &lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Suppose you have typed a command with a few arguments and want to insert  another argument before an argument which is three words backward.&lt;/p&gt;&lt;pre&gt;$ echo arg1 &lt;em&gt;(want to insert arg5 here)&lt;/em&gt; arg2 arg3 arg4&lt;strong&gt;[i]&lt;/strong&gt; &lt;/pre&gt; &lt;p&gt;Hit &amp;lsquo;&lt;strong&gt;ESC&lt;/strong&gt;&amp;lsquo; to switch to &lt;strong&gt;command mode&lt;/strong&gt; and  press &amp;lsquo;&lt;strong&gt;3&lt;/strong&gt;&amp;lsquo; followed by &amp;lsquo;&lt;strong&gt;B&lt;/strong&gt;&amp;lsquo;:&lt;/p&gt;&lt;pre&gt;$ echo arg1 &lt;strong&gt;[c]&lt;/strong&gt;arg2 arg3 arg4&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Alternatively you could have hit &amp;lsquo;&lt;strong&gt;B&lt;/strong&gt;&amp;lsquo; three times:  &amp;lsquo;&lt;strong&gt;BBB&lt;/strong&gt;&amp;lsquo;.&lt;/p&gt; &lt;p&gt;Now, enter &lt;strong&gt;insert mode&lt;/strong&gt; by hitting &amp;lsquo;&lt;strong&gt;i&lt;/strong&gt;&amp;lsquo; and  type &amp;lsquo;&lt;strong&gt;arg5 &lt;/strong&gt;&amp;lsquo;&lt;/p&gt;&lt;pre&gt;$ echo arg1 arg5 &lt;strong&gt;[i]&lt;/strong&gt;arg2 arg3 arg4&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;&lt;strong&gt;Example 2:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Suppose you wanted to change &lt;strong&gt;arg2&lt;/strong&gt; to  &lt;strong&gt;arg5&lt;/strong&gt;:&lt;/p&gt;&lt;pre&gt;$ echo arg1 &lt;strong&gt;[c]&lt;/strong&gt;arg2 arg3 arg4&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;To do this, you can type &amp;lsquo;&lt;strong&gt;cw&lt;/strong&gt;&amp;lsquo; which means &amp;lsquo;change word&amp;rsquo; and  just type out &amp;lsquo;&lt;strong&gt;arg5&lt;/strong&gt;&amp;lsquo;:&lt;/p&gt;&lt;pre&gt;$ echo arg1 arg5&lt;strong&gt;[c]&lt;/strong&gt; arg3 arg4&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Or even quicker, you can type &amp;lsquo;&lt;strong&gt;f2r5&lt;/strong&gt;&amp;lsquo;, where  &amp;lsquo;&lt;strong&gt;f2&lt;/strong&gt;&amp;lsquo; moves the cursor right to next occurrence of character  &amp;lsquo;&lt;strong&gt;2&lt;/strong&gt;&amp;lsquo; and &amp;lsquo;&lt;strong&gt;r5&lt;/strong&gt;&amp;lsquo; replaces the character under the  cursor with character &amp;lsquo;&lt;strong&gt;5&lt;/strong&gt;&amp;lsquo;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Example 3:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Suppose you typed a longer command and you noticed that you had made several  mistakes, and wanted to do the correction in the vi editor itself. You can type  &amp;lsquo;&lt;strong&gt;v&lt;/strong&gt;&amp;lsquo; to edit the command in the editor and not on the command  line!&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Example 4:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Suppose you typed a long command and remembered that you had to execute  another one before it. No need to erase the current command! You can switch to  &lt;strong&gt;command mode&lt;/strong&gt; by hitting &lt;strong&gt;ESC&lt;/strong&gt; and then type  &amp;lsquo;&lt;strong&gt;#&lt;/strong&gt;&amp;lsquo; which will send the current command as a comment in the  command history. After you type the command you had forgotten, you may go two  commands back in history by typing &amp;lsquo;&lt;strong&gt;kk&lt;/strong&gt;&amp;lsquo; (or  &amp;lsquo;&lt;strong&gt;2k&lt;/strong&gt;&amp;lsquo;), erase the &amp;lsquo;&lt;strong&gt;#&lt;/strong&gt;&amp;lsquo; character which was  appended as a comment and execute the command, this makes the whole command look  like &amp;lsquo;&lt;strong&gt;ESC 2k0x ENTER&lt;/strong&gt;&amp;lsquo;.&lt;/p&gt; &lt;p&gt;These are really basic examples, and it doesn&amp;rsquo;t get much more complex than  this. You should check out the cheat sheet for other tips and examples, and try  them out!&lt;/p&gt; &lt;p&gt;To create the cheat sheet, I downloaded &lt;a href=&quot;http://ftp.gnu.org/gnu/bash/bash-2.05b.tar.gz&quot;&gt;bash-2.05b source code&lt;/a&gt;  and scanned through &lt;a href=&quot;/download/vi_keymap.c&quot;&gt;lib/readline/vi_keymap.c&lt;/a&gt;  source code file and &lt;a href=&quot;/download/vi_mode.c&quot;&gt;lib/readline/vi_mode.c&lt;/a&gt; to  find all the default key bindings.&lt;/p&gt; &lt;p&gt;It turned out that the commands documented in &lt;strong&gt;vi_keymap.c&lt;/strong&gt;  were all documented in &lt;a href=&quot;http://linux.die.net/man/3/readline&quot;&gt;man 3  readline&lt;/a&gt; and I didn&amp;rsquo;t find anything new.&lt;/p&gt; &lt;p&gt;After that I checked &lt;a href=&quot;/download/bashline.c&quot;&gt;bashline.c&lt;/a&gt; source  file function &lt;strong&gt;initialize_readline&lt;/strong&gt; to find how the default  keyboard shortcuts were changed. I found that &amp;lsquo;&lt;strong&gt;CTRL-e&lt;/strong&gt;&amp;lsquo; (which  switched from &lt;strong&gt;vi&lt;/strong&gt; mode to &lt;strong&gt;emacs&lt;/strong&gt;) got undefined,  &amp;lsquo;&lt;strong&gt;v&lt;/strong&gt;&amp;lsquo; got defined which opens the existing command in the editor,  and &amp;lsquo;&lt;strong&gt;@&lt;/strong&gt;&amp;lsquo; which replaces a macro key (char) with the  corresponding string.&lt;/p&gt; &lt;p&gt;The cheat sheet includes:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Commands for entering input mode,  &lt;/li&gt;&lt;li&gt;Basic movement commands,  &lt;/li&gt;&lt;li&gt;Character finding commands,  &lt;/li&gt;&lt;li&gt;Character finding commands,  &lt;/li&gt;&lt;li&gt;Deletion commands,  &lt;/li&gt;&lt;li&gt;Undo, redo and copy/paste commands,  &lt;/li&gt;&lt;li&gt;Commands for history manipulation,  &lt;/li&gt;&lt;li&gt;Completion commands,  &lt;/li&gt;&lt;li&gt;A few misc. commands, and  &lt;/li&gt;&lt;li&gt;Tips and examples &lt;/li&gt;&lt;/ul&gt; &lt;div class=&quot;download&quot;&gt; &lt;div class=&quot;download-title&quot;&gt;Download Vi Editing Mode Cheat Sheet&lt;/div&gt; &lt;p&gt;&lt;strong&gt;PDF format (.pdf):&lt;/strong&gt;&lt;br /&gt;Download link: &lt;a href=&quot;http://www.catonmat.net/download/bash-vi-editing-mode-cheat-sheet.pdf&quot; title=&quot;Version 1.0 downloaded 199 times&quot;&gt;bash vi editing mode cheat sheet (.pdf)&lt;/a&gt;&lt;br /&gt;Downloaded: 199  times&lt;/p&gt; &lt;p&gt;&lt;strong&gt;ASCII .txt format:&lt;/strong&gt;&lt;br /&gt;Download link: &lt;a href=&quot;http://www.catonmat.net/download/bash-vi-editing-mode-cheat-sheet.txt&quot; title=&quot;Version 1.0 downloaded 110 times&quot;&gt;bash vi editing mode cheat sheet (.txt)&lt;/a&gt;&lt;br /&gt;Downloaded: 110  times&lt;/p&gt; &lt;p&gt;&lt;strong&gt;LaTeX format (.tex):&lt;/strong&gt;&lt;br /&gt;Download link: &lt;a href=&quot;http://www.catonmat.net/download/bash-vi-editing-mode-cheat-sheet.tex&quot; title=&quot;Version 1.0 downloaded 18 times&quot;&gt;bash vi editing mode cheat sheet (latex .tex)&lt;/a&gt;&lt;br /&gt;Downloaded:  18 times&lt;/p&gt; &lt;p&gt;This cheat sheet is released under GNU Free Document License.&lt;/p&gt;&lt;/div&gt; 
</content> 
</entry> 

  
 
  
   
 
 <entry> 
 <id>tag:www.iblog.com,2007-12-30:470228</id>
 <title>关于sed的又一问题</title> 
 <link rel="alternate" type="text/html" href="http://guocongbin.iblog.com/post/1964/470228" /> 
  
 <modified>2007-12-30T22:08:27+0300</modified> 
 <issued>2007-12-30T22:08:27+0300</issued> 
 <created>2007-12-30T22:08:27+0300</created> 
 <summary type="text/plain"> 这个问题的描述大概如下  一个文本里面的一些行中存在一些注释，注释的格式和C的类似（/* .. ...</summary> 
 <author> 
  
 <name>guocongbin</name> 
 <url>http://guocongbin.iblog.com</url> 
 <email>guocongbin@gmail.com</email> 
</author> 
<dc:subject>
Unix 
Shell 
Linux 
bash 
</dc:subject> 
 <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://guocongbin.iblog.com"> 
 &lt;p&gt;这个问题的描述大概如下&lt;/p&gt;&lt;p&gt;一个文本里面的一些行中存在一些注释，注释的格式和C的类似（/* .. */)不过不用考虑注释跨行的case。而且一行中可能存在多个注释。现在的需求是将这行中所有的注释移动的行尾。&lt;/p&gt;&lt;p&gt;其实这个问题并不复杂。&amp;nbsp;  &lt;/p&gt;&lt;p&gt;对于这类问题，关键是要使用sed的branch功能，也就是创建一个循环。我给一个大概的思路&lt;/p&gt;&lt;p&gt;首先要将行尾做一个标记，这样我们就只是移动该标记之前的所匹配的模式了；然后定义个标签，供循环使用；然后对行尾标记前的字符串进行处理，找到符合模式的部分，并移动到行尾之后；使用t命令，如果上面的替换操作成功，就跳转到定义的标记哪里，重新开始一个循环；最后将行尾标记替换成普通分隔符。&lt;/p&gt;&lt;p&gt;下面举个简单的例子，为了简化问题，这里我们将一行中出现的所有的a字符都移动到行尾&lt;/p&gt;&lt;p&gt;命令如下&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class=&quot;prettyprint&quot;&gt;$echo a b c d a b a c |sed &amp;#39;s,$,^A,;:a;s,([^a]*)(a)([^a]*^A),132,;ta;s,^A, ,&amp;#39; &lt;/pre&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt; 
</content> 
</entry> 

  
 
  
   
 
 <entry> 
 <id>tag:www.iblog.com,2007-12-28:468622</id>
 <title>how to print the date from one date to another date</title> 
 <link rel="alternate" type="text/html" href="http://guocongbin.iblog.com/post/1964/468622" /> 
  
 <modified>2007-12-28T06:46:18+0300</modified> 
 <issued>2007-12-28T06:46:18+0300</issued> 
 <created>2007-12-28T06:46:18+0300</created> 
 <summary type="text/plain"> The question is got from a forum. Actually, the question is very simple if you understand the usage of command `date`.  date is a very insteresting command, which can understand what you said in ...</summary> 
 <author> 
  
 <name>guocongbin</name> 
 <url>http://guocongbin.iblog.com</url> 
 <email>guocongbin@gmail.com</email> 
</author> 
<dc:subject>
Unix 
Shell 
Linux 
bash 
</dc:subject> 
 <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://guocongbin.iblog.com"> 
 &lt;p&gt;The question is got from a forum. Actually, the question is very simple if you understand the usage of command `date`.&lt;/p&gt;&lt;p&gt;date is a very insteresting command, which can understand what you said in netural language. eg.&lt;/p&gt;&lt;pre class=&quot;prettyprint&quot;&gt;$date --date=&amp;#39;2 days ago&amp;#39;&lt;br /&gt;Wed Dec 26 20:06:29 CST 2007&lt;/pre&gt;&lt;p&gt;Wow, it know what do you want!&amp;nbsp; For more powerful feature, you could man it or info it.&lt;/p&gt;&lt;p&gt;As far as the question in titile,&amp;nbsp; if we can convert the date string into seconds from 1970-1-1, it would be solved easily.&lt;/p&gt;&lt;p&gt;For example, we need to print all date from 2007-7-1 to 2007-8-1. First we need to know how many seconds of two dates from 1970-1-1 00:00:00.&lt;/p&gt;&lt;pre class=&quot;prettyprint&quot;&gt;$date -d 2007-7-1 +%s&lt;br /&gt;1183219200&lt;/pre&gt;&lt;pre class=&quot;prettyprint&quot;&gt;$date -d 2007-8-1 +%s&lt;br /&gt;1185897600&lt;/pre&gt;&lt;p&gt;Okay, then it should be know that command date not only can convert a date string to the seconds from era, but also can convert a seconds to a date string. e.g.&lt;/p&gt;&lt;pre class=&quot;prettyprint&quot;&gt;$date -d &amp;quot;2007-1-1 12345sec&amp;quot;&lt;br /&gt;Mon Jan&amp;nbsp; 1 03:25:45 CST 2007&lt;/pre&gt;&lt;p&gt;Oops,&amp;nbsp; so powerful.&lt;/p&gt;&lt;p&gt;Okay, i think you may know the answer of the question.&lt;/p&gt;&lt;pre class=&quot;prettyprint&quot;&gt;#!/bin/bash&lt;br /&gt;for ((i=0; i&amp;lt; 30; i++));do&lt;br /&gt;    date -d &amp;#39;2007-7-1 $i day&amp;#39;&amp;nbsp; +%F&lt;br /&gt;done&lt;/pre&gt;or&lt;pre class=&quot;prettyprint&quot;&gt;#!/bin/bash&lt;br /&gt;init=`date -d&amp;#39;2007-1-1&amp;#39; +%s`&lt;br /&gt;fini=`date -d&amp;#39;2007-8-1&amp;#39; +%s`&lt;br /&gt;for(( i=$init; i&amp;lt;$fini; i+=`expr 24 * 60 *60`));do&lt;br /&gt;    date -d &amp;#39;1970-1-1 $i sec&amp;#39; +%F&lt;br /&gt;done&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/pre&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt; 
</content> 
</entry> 

  
 
  
   
 
 <entry> 
 <id>tag:www.iblog.com,2007-12-26:467666</id>
 <title>两个管道，两种处理</title> 
 <link rel="alternate" type="text/html" href="http://guocongbin.iblog.com/post/1964/467666" /> 
  
 <modified>2007-12-26T10:52:58+0300</modified> 
 <issued>2007-12-26T10:52:58+0300</issued> 
 <created>2007-12-26T10:52:58+0300</created> 
 <summary type="text/plain"> ...</summary> 
 <author> 
  
 <name>guocongbin</name> 
 <url>http://guocongbin.iblog.com</url> 
 <email>guocongbin@gmail.com</email> 
</author> 
<dc:subject>
Unix 
Shell 
Linux 
bash 
</dc:subject> 
 <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://guocongbin.iblog.com"> 
 &lt;p&gt;众所周知，一般的命令输出是可以输出到两个管道里面的。一个管道名曰标准输出（stdout，文件描述符为1）。另一个管道名为标准错误（stderr，文件描述符为2）。&lt;/p&gt;&lt;p&gt;通常来讲，stdout主要用来输出命令执行的结果；而stderr主要用来显示一些命令执行过程中的出错信息等等。&lt;/p&gt;&lt;p&gt;linux/unix中，我们可以使用带文件描述符的重定向符号来分别重定向输出到stdout和stderr的内容，例如&lt;/p&gt;&lt;pre class=&quot;prettyprint&quot;&gt;date &amp;gt;file1 2&amp;gt;file2&lt;/pre&gt;&lt;p&gt;其中&amp;#39;&amp;gt;&amp;lsquo;与&amp;#39;1&amp;gt;&amp;#39;等价，都意味著将输出到stdout的内容进行重定向。&lt;/p&gt;&lt;p&gt;&amp;nbsp;关于这个重定向，另外一个典型的应用就是将 输出到stderr的内容屏蔽掉，也就是不显示错误信息。这个重定向的用法如下：&lt;/p&gt;&lt;pre&gt;cmd &amp;gt;file1 2&amp;gt;/dev/null&lt;/pre&gt;&lt;p&gt;/dev/null是一个特殊的设备，所有重定向到这里的内容都不会显示出来。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;那么如何将输出到两个管道的内容写入同一个文件呢。这个其实很简单，这样写就可以。&lt;/p&gt;&lt;pre&gt;cmd &amp;gt;file 2&amp;gt;&amp;amp;1&lt;/pre&gt;&lt;p&gt;&amp;quot;2&amp;gt;&amp;amp;1&amp;quot;表示将stderr（2）重定向到stdout（1）。（但是，严格说来&amp;quot;2&amp;gt;&amp;amp;1&amp;quot;并不是这个意思，应该是将文件描述符2作为文件描述符1 的一个副本。）这样输出到两个管道的内容就合并到一起了。 &lt;/p&gt;&lt;p&gt;&amp;nbsp;有意思的是，上面写法的顺序是不可颠倒的，如果写成了&lt;/p&gt;&lt;pre class=&quot;prettyprint&quot;&gt;cmd 2&amp;gt;&amp;amp;1 &amp;gt;file&lt;/pre&gt;&lt;p&gt;效果是与前者有着微妙的区别的。&lt;/p&gt;&lt;p&gt;现在我们做一个实验。&lt;/p&gt;&lt;p&gt;分别执行这两个命令，看看有什么结果输出&lt;/p&gt;&lt;pre&gt;(echo aaaa; echo bbbb &amp;gt;&amp;amp;2) &amp;gt;file1 2&amp;gt;&amp;amp;1|cat&lt;/pre&gt;&lt;pre&gt;(echo aaaa; echo bbbb &amp;gt;&amp;amp;2) 2&amp;gt;&amp;amp;1 &amp;gt;file1 |cat&lt;/pre&gt;&lt;p&gt;我们可以看到第一条命令没有任何输出，因为所有的输出都已经重定向到文件file1中了。但是第二条命令却有输出，输出的内容是echo到stderr的内容。这是为啥呢？&lt;/p&gt;&lt;p&gt;这个其实可以如此解释。前面说过，&amp;quot;2&amp;gt;&amp;amp;1&amp;quot;并不表示将stderr重定向到stdout，而是将文件描述符2作为文件描述符1的一个副本。那么上面的第二条命令中，最开始的时候，文件描述符1和2 都没有被重定向，也就是都是输出到屏幕的。然后执行2&amp;gt;&amp;amp;1，这样文件描述符2成为了文件描述符1的副本，（注意，此时文件描述符1还是重定向到屏幕的）；然后文件描述符1被重定向到文件file1中（注意，只有文件描述符1被改变了，它的原来的副本，也就是文件描述符2所代表的stderr管道并没有别修改）。如此一来，输出到stderr的内容就通过管道符号&amp;ldquo;|&amp;rdquo;传入到cat命令，作为输入了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;言归正传，本文的目的是提出一个解决如何处理输出到两个管道的内容。同时，输出的内容最终还要按照输出的顺序合并在一起。这个方法的一个应用场景就是log文件。比如，一个makefile的执行结果，输出的内容可能非常的多，因此想从里面找到编译错误信息就比较困难。如果我们能够自动的对输出到stderr的内容进行处理，那么我们就可以为这些内容做一些标记，方便其他程序对这个输出的log进行进一步的处理（比如做一个html的标签，使用特殊的字体或者颜色来显示stderr的信息）。&lt;/p&gt;&lt;p&gt;这个问题可以使用这个脚本来解决。&lt;/p&gt;&lt;pre class=&quot;prettyprint&quot;&gt;#!/bin/bash&lt;br /&gt;LOGFILE=logfile&lt;br /&gt;rm -rf $LOGFILE&lt;br /&gt;(echo aaaa; echo bbbb 1&amp;gt;&amp;amp;2) 2&amp;gt;&amp;amp;1&amp;nbsp; &amp;gt;&amp;gt; $LOGFILE | &lt;br /&gt;while read l;do&lt;br /&gt;    echo &amp;quot;&amp;lt;B&amp;gt;&amp;quot;$l&amp;quot;&amp;lt;/B&amp;gt;&amp;quot;;&lt;br /&gt;done &amp;gt;&amp;gt;$LOGFILE&lt;/pre&gt;&lt;p&gt;上面的脚本的作用就是将输出到stderr的内容使用&amp;lt;B&amp;gt;和&amp;lt;/B&amp;gt;扩起来（即，使用粗体显示）。输出的结果如下&lt;/p&gt;&lt;pre class=&quot;prettyprint&quot;&gt;aaaa&lt;br /&gt;&amp;lt;B&amp;gt;bbbb&amp;lt;/B&amp;gt;&lt;/pre&gt;&lt;p&gt;这样的一个脚本已经基本满足我们的需要了。&lt;/p&gt;&lt;p&gt;不过问题还是有的，例如我们要想分别同时处理输出到两个管道的内容，然后将处理的结果合并到一个文件里面。这该怎么办呢？在上面的方法中，只有一个管道的内容可以被一些命理处理，另外的一个管道的内容只能直接写入文件。因此上面的方法无法满足这个要求。&lt;/p&gt;&lt;p&gt;要解决这个问题，我们可以启动两个后台进程分别监听两个管道，如果管道内有内容写入，那么就读出内容，然后进行处理，然后写入到log文件中。示例脚本如下&lt;/p&gt;&lt;pre class=&quot;prettyprint&quot;&gt;#!/bin/bash&lt;br /&gt;LOGFILE=logfile&lt;br /&gt;mknod pipe1 p&lt;br /&gt;mknod pipe2 p&lt;br /&gt;exec 7&amp;lt;&amp;gt;pipe1&lt;br /&gt;exec 8&amp;lt;&amp;gt;pipe2&lt;br /&gt;while read l;do echo &amp;quot;&amp;lt;I&amp;gt;&amp;quot;$l&amp;quot;&amp;lt;/I&amp;gt;&amp;quot;;done &amp;lt;&amp;amp;7 &amp;gt;&amp;gt; $LOGFILE &amp;amp;&lt;br /&gt;while read l;do echo &amp;quot;&amp;lt;B&amp;gt;&amp;quot;$l&amp;quot;&amp;lt;/B&amp;gt;&amp;quot;;done &amp;lt;&amp;amp;8 &amp;gt;&amp;gt; $LOGFILE &amp;amp;&lt;br /&gt;cmd 1&amp;gt;&amp;amp;7 2&amp;gt;&amp;amp;8&lt;/pre&gt;&lt;p&gt;上面脚本中，首先创建两个管道pipe1 和pipe2，然后将文件描述符7和8关联到这两个管道。然后启动两个异步的进程，分别监听7和8。如果发现有内容写入7或者8，就进行相应的处理。凡是输出要进行这样处理的命令，都可以将stdout重定向到7上，stderr重定向到8上。&lt;/p&gt;&lt;p&gt;这样就大功告成了&lt;img src=&quot;http://www.iblog.com/js/tinymce/plugins/emotions/images/smiley-cool.gif&quot; border=&quot;0&quot; alt=&quot;Cool&quot; title=&quot;Cool&quot; /&gt; &lt;/p&gt; 
</content> 
</entry> 

  
 
  
   
 
 <entry> 
 <id>tag:www.iblog.com,2007-12-24:466257</id>
 <title>杂记grep</title> 
 <link rel="alternate" type="text/html" href="http://guocongbin.iblog.com/post/1964/466257" /> 
  
 <modified>2007-12-24T03:43:13+0300</modified> 
 <issued>2007-12-24T03:43:13+0300</issued> 
 <created>2007-12-24T03:43:13+0300</created> 
 <summary type="text/plain"> 1. 如何grep一个段落 ...</summary> 
 <author> 
  
 <name>guocongbin</name> 
 <url>http://guocongbin.iblog.com</url> 
 <email>guocongbin@gmail.com</email> 
</author> 
<dc:subject>
Unix 
Shell 
Linux 
bash 
</dc:subject> 
 <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://guocongbin.iblog.com"> 
 &lt;p&gt;1. 如何grep一个段落&lt;br /&gt;aix上面的grep有个参数-p可以用来grep一个段落。但是其他平台上面的grep似乎没有这个功能。不用不用着急，功能更加强大的sed可以完成这一任务。&lt;br /&gt;如果段落是使用空行来分割的，这个命令可以如此写&lt;br /&gt;&lt;span class=&quot;Code&quot;&gt;sed -e &amp;#39;/./{H;$!d;}&amp;#39; -e &amp;#39;x;/AAA/!d;&amp;#39; &amp;lt;filename&amp;gt;&lt;/span&gt;&lt;br /&gt;关于sed的一些其他用途，可以参考&lt;a href=&quot;http://blog.csdn.net/guocongbin/archive/2007/12/02/1911915.aspx&quot;&gt;这篇文章&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;2.如何grep一个进程的时候，不显示grep进程本身。&lt;br /&gt;这是一个经常遇到的问题，例如&lt;br /&gt;&lt;span class=&quot;Code&quot;&gt;ps -ef |grep &amp;lt;command&amp;gt;&lt;/span&gt;&lt;br /&gt;在显示中经常出现这个grep进程自己。如果在执行脚本的时候出现这个问题，确实比较烦人。&lt;br /&gt;一个方法如此&lt;br /&gt;&lt;span class=&quot;Code&quot;&gt;ps -ef | grep &amp;lt;command&amp;gt;|grep -v grep&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold&quot;&gt;&lt;/span&gt;但是这个方法写法臃肿，而且效率低下。这里有一个比较简洁的方法。比如要被grep的命令是cat，这样写就没有问题了。&lt;br /&gt;&lt;span class=&quot;Code&quot;&gt;ps -ef | grep [c]at&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;http://www.iblog.com/js/tinymce/plugins/emotions/images/smiley-tongue-out.gif&quot; border=&quot;0&quot; alt=&quot;Tongue out&quot; title=&quot;Tongue out&quot; /&gt; &lt;/p&gt; 
</content> 
</entry> 

  
 
  
   
 
 <entry> 
 <id>tag:www.iblog.com,2007-12-23:466089</id>
 <title>CYGWIN FAQ</title> 
 <link rel="alternate" type="text/html" href="http://guocongbin.iblog.com/post/1964/466089" /> 
  
 <modified>2007-12-23T22:31:33+0300</modified> 
 <issued>2007-12-23T22:31:33+0300</issued> 
 <created>2007-12-23T22:31:33+0300</created> 
 <summary type="text/plain">CYGWIN FAQ 3.1.  Q  Howto get version info?            bash$ cygcheck -c cygwin    &amp;nbsp;    3.2.  Q  安装注意事项      gzip         gzip 版本 1.3.3-4 可用。高版本如: 1.3.5-1 使 ...</summary> 
 <author> 
  
 <name>guocongbin</name> 
 <url>http://guocongbin.iblog.com</url> 
 <email>guocongbin@gmail.com</email> 
</author> 
<dc:subject>
cygwin 
</dc:subject> 
 <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://guocongbin.iblog.com"> 
 CYGWIN FAQ&lt;h3&gt;3.1. &lt;strong&gt;Q&lt;/strong&gt; Howto get version info?&lt;/h3&gt;  &lt;pre&gt;        bash$ cygcheck -c cygwin&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;&lt;a name=&quot;_3_2&quot;&gt;&lt;/a&gt;3.2. &lt;strong&gt;Q&lt;/strong&gt; 安装注意事项&lt;/h3&gt;  &lt;ul&gt;&lt;li&gt; gzip &lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt; gzip 版本 1.3.3-4 可用。高版本如: 1.3.5-1 使 tar -z 命令运行不正常。 &lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;&lt;a name=&quot;_3_3&quot;&gt;&lt;/a&gt;3.3. &lt;strong&gt;Q&lt;/strong&gt; Howto setup default text format, CRLF(dos) or LF(unix)?&lt;/h3&gt;  &lt;ul&gt;&lt;li&gt; 修改注册表项：HKEY_LOCAL_MACHINESOFTWARECygnus SolutionsCygwinmounts v2...cygdrive flags。 cygdrive flags是一个DWORD值，&amp;amp;0x2 == 0x2 为 Unix Style，否则为 Dos like style。 &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt; 设置环境变量 CYGWIN, 使得在 pipe 等模式下的处理方式：export CYGWIN=nobinmode &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;&lt;a name=&quot;_3_4&quot;&gt;&lt;/a&gt;3.4. &lt;strong&gt;Q&lt;/strong&gt; 为什么在 Cygwin 下创建的文件，其他管理员不可写？&lt;/h3&gt;  这是所谓的 ntsec 在起作用。通过 NTFS 的权限设置，模拟 UNIX 的权限。可以通过 CYGWIN 环境变量修改。如： &lt;pre&gt;        bash$ export CYGWIN=&amp;quot;nontsec nosmbntsec&amp;quot;&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;&lt;a name=&quot;_3_5&quot;&gt;&lt;/a&gt;3.5. &lt;strong&gt;Q&lt;/strong&gt; 如何让 ls 能够显示中文文件名?&lt;/h3&gt;  因为 ls 不使用 readline 来显示, 因而不能用 .inputrc 控制。即 less 和 ls 需要特别设置。 在 .bashrc 中加入如下 alias： &lt;pre&gt;	alias less=&amp;#39;/bin/less -r&amp;#39;&lt;br /&gt;	alias ls=&amp;#39;/bin/ls -F --color=tty --show-control-chars&amp;#39;&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;&lt;a name=&quot;_3_6&quot;&gt;&lt;/a&gt;3.6. &lt;strong&gt;Q&lt;/strong&gt; 如何在按 TAB 键进行文件名扩展时忽略大小写，这样在 Windows 下才方便噢?&lt;/h3&gt;  参见： &lt;a href=&quot;http://www.cygwin.com/cygwin-ug-net/cygwin-ug-net.html&quot;&gt;[Cygwin User&amp;#39;s Guide]&lt;/a&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h2&gt;Customizing bash&lt;/h2&gt;  Three initialization files that control the behavior of bash: .profile, .bashrc and .inputrc. &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;.profile&lt;/h3&gt;  It is executed when bash is started as login shell, e.g. from the command bash --login. &lt;p&gt; &lt;strong&gt;建议&lt;/strong&gt;  &lt;/p&gt;&lt;ul&gt;&lt;li&gt; 在 PATH 后加上 &amp;quot;:.&amp;quot;，这样可以象在 DOS 下，执行本目录下程序； &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;.bashrc&lt;/h3&gt;  .bashrc is similar to .profile but is executed each time an interactive bash shell is launched.  &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;.inputrc&lt;/h3&gt;  .inputrc controls how programs using the readline library (including bash) behave. &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;# Ignore case while completing&lt;br /&gt;set completion-ignore-case on&lt;br /&gt;# Make Bash 8bit clean&lt;br /&gt;set meta-flag on&lt;br /&gt;set output-meta on # to show 8-bit characters&lt;br /&gt;set convert-meta off # to show it as character, not the octal representation&lt;br /&gt;&lt;/pre&gt; &lt;/dd&gt;&lt;/dl&gt; &lt;p&gt; 但是并不能保证 ls 显示中文。因为这些工具不使用 readline 来显示。象 less 和 ls 需要特别设置。 在 .bashrc 中加入如下 alias： &lt;/p&gt;&lt;pre&gt;	alias less=&amp;#39;/bin/less -r&amp;#39;&lt;br /&gt;	alias ls=&amp;#39;/bin/ls -F --color=tty --show-control-chars&amp;#39;&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;&lt;a name=&quot;_3_7&quot;&gt;&lt;/a&gt;3.7. &lt;strong&gt;Q&lt;/strong&gt; 如何在 Cygwin 中运行 crontab？&lt;/h3&gt;  如下: &lt;ul&gt;&lt;li&gt; 在Windows上安装系统服务 cron，开机即运行。 &lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;        bash$ cygrunsrv -I cron -p /usr/sbin/cron -a -D&lt;br /&gt;&lt;/pre&gt; &lt;/dd&gt;&lt;/dl&gt;&lt;ul&gt;&lt;li&gt; 启动服务 &lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;        bash$ cygrunsrv -S cron&lt;br /&gt;&lt;/pre&gt; &lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;&lt;a name=&quot;_3_8&quot;&gt;&lt;/a&gt;3.8. &lt;strong&gt;Q&lt;/strong&gt; 配置 SSH client? &lt;/h3&gt;  &lt;ul&gt;&lt;li&gt; 为了能够通过公钥验证进行SSH登陆其他服务器，先要在本地建立 SSH 公钥私钥对： &lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;        bash$ ssh-keygen -t rsa1&lt;br /&gt;        bash$ ssh-keygen -t rsa&lt;br /&gt;        bash$ ssh-keygen -t dsa&lt;br /&gt;&lt;/pre&gt; &lt;/dd&gt;&lt;/dl&gt;&lt;ul&gt;&lt;li&gt; 建立无口令登录 &lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt; 需要将本机的 *.pub 拷贝(cat&amp;gt;&amp;gt;)到服务器中 $HOME/.ssh/ 下的 authorized_keys (ssh1) 和 authorized_keys2 (ssh2) 文件中去。 &lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;&lt;a name=&quot;_3_9&quot;&gt;&lt;/a&gt;3.9. &lt;strong&gt;Q&lt;/strong&gt; 如何在 cygwin 中运行 sshd （SSH Server）? &lt;/h3&gt;  如下： &lt;ul&gt;&lt;li&gt; 设置 Windows 环境变量，添加&amp;ldquo;CYGWIN = ntsec tty&amp;rdquo; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt; Config SSHD, running: &lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;        bash$ ssh-host-config -y&lt;br /&gt;&lt;/pre&gt; &lt;/dd&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt; 根据提示，输入 CYGWIN=ntsec tty &lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt; Change permissions and ownership on some files:  &lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;        bash$ cd /; chmod -R og-w . &lt;br /&gt;        bash$ chmod og+w /tmp &lt;br /&gt;        bash$ touch /var/log/sshd.log &lt;br /&gt;        bash$ chown system:system /var/log/sshd.log /var/empty /etc/ssh_h* &lt;br /&gt;        bash$ chmod 755 /var/empty &lt;br /&gt;&lt;/pre&gt; &lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt; start the service:  &lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;        bash$ cygrunsrv -S sshd&lt;br /&gt;&lt;/pre&gt; &lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;&lt;a name=&quot;_3_10&quot;&gt;&lt;/a&gt;3.10. &lt;strong&gt;Q&lt;/strong&gt; 如何在 cygwin 中配置 Email? &lt;/h3&gt;  As follows: &lt;ul&gt;&lt;li&gt; ssmtp &amp;amp; mutt &lt;ul&gt;&lt;li&gt; ssmtp &lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;        bash$ /usr/bin/ssmtp-config&lt;br /&gt;&lt;/pre&gt; &lt;/dd&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt; When using mutt as the mail client, add the following line to your $HOME/.muttrc file: &lt;/dd&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;        set sendmail=&amp;quot;/usr/sbin/ssmtp&amp;quot;&lt;br /&gt;&lt;/pre&gt; &lt;/dd&gt;&lt;/dl&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&amp;nbsp;&lt;ul&gt;&lt;li&gt; mutt &lt;ul&gt;&lt;li&gt; Make sure you have the Cygwin ssmtp package installed &lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt; check file /etc/ssmtp/ssmtp.conf &lt;/dd&gt;&lt;/dl&gt;&lt;ul&gt;&lt;li&gt; vi .bashrc and/or .bash_profile &lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;        export MAIL=~/Mail/inbox&lt;br /&gt;        export EDITOR=nano&lt;br /&gt;&lt;/pre&gt; &lt;/dd&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt; If you have nano installed (and I stongly recommend that you do) &lt;/dd&gt;&lt;/dl&gt;&lt;ul&gt;&lt;li&gt; Create the following directory structure in your HOME directory: &lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;        ~/Mail&lt;br /&gt;           |&lt;br /&gt;           -- inbox (EMPTY FILE, NOT DIRECTORY)&lt;br /&gt;           |&lt;br /&gt;           -- sent (EMPTY FILE, NOT DIRECTORY)&lt;br /&gt;           |&lt;br /&gt;           -- received (EMPTY FILE, NOT DIRECTORY)&lt;br /&gt;           |&lt;br /&gt;           -- postponed (EMPTY FILE, NOT DIRECTORY)&lt;br /&gt;&lt;/pre&gt; &lt;/dd&gt;&lt;/dl&gt;&lt;ul&gt;&lt;li&gt; Create a ~/.muttrc file that looks like this: &lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;        # The file/directory where your incoming mail will be spooled to&lt;br /&gt;        # (same as &amp;#39;set spoolfile&amp;#39; below)&lt;br /&gt;        mailboxes ~/Mail/inbox&lt;br /&gt;        &lt;br /&gt;        # Mail account setup.  I know nothing about IMAP, so you&amp;#39;re&lt;br /&gt;        # on your own there.&lt;br /&gt;        set sendmail=&amp;quot;/usr/sbin/ssmtp&amp;quot;&lt;br /&gt;        #set pop_host=&amp;quot;your.pop3.mail.server.com&amp;quot;&lt;br /&gt;        #set pop_last=yes&lt;br /&gt;        #set pop_user=&amp;quot;your_email_username&amp;quot;&lt;br /&gt;        #set pop_pass=&amp;quot;your_email_password&amp;quot;&lt;br /&gt;        set from=&amp;quot;your_complete@email_address.com&amp;quot;&lt;br /&gt;        &lt;br /&gt;        # Mail folder setup.&lt;br /&gt;        set folder=~/Mail&lt;br /&gt;        set mbox_type=mbox&lt;br /&gt;        set spoolfile=+inbox&lt;br /&gt;        set mbox=+received&lt;br /&gt;        set postponed=+postponed&lt;br /&gt;        set record=+sent&lt;br /&gt;&lt;/pre&gt; &lt;/dd&gt;&lt;/dl&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&amp;nbsp;&lt;ul&gt;&lt;li&gt;&amp;nbsp;&lt;ul&gt;&lt;li&gt; mutt command line &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;        mutt [...] address&lt;br /&gt;        参数:&lt;br /&gt;            -a file : attach a file to message&lt;br /&gt;            -b address: BCC&lt;br /&gt;            -c address: CC&lt;br /&gt;            -F muttrc&lt;br /&gt;            -H draft: draft contain both header and body&lt;br /&gt;            -s subject: subject of the message&lt;br /&gt;            -x : emulate the mailx compose mode&lt;br /&gt;        &lt;br /&gt;        环境变量:&lt;br /&gt;            EMAIL : user&amp;#39;s email address&lt;br /&gt;            MAIL  : user&amp;#39;s spool mailbox&lt;br /&gt;        示例:&lt;br /&gt;            bash$ echo &amp;quot;contents&amp;quot; | mutt -x -s &amp;quot;subject&amp;quot; mail@address&lt;br /&gt;            bash$ echo  | mutt -x -s &amp;quot;subject&amp;quot; -i filename mail@address&lt;br /&gt;&lt;/pre&gt; &lt;/dd&gt;&lt;/dl&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt; exim &amp;amp; minires &lt;ul&gt;&lt;li&gt; exim &lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;    Exim is a fully featured mail transfer agent, a drop-in replacement for sendmail.&lt;br /&gt;        bash$ /usr/bin/exim-config&lt;br /&gt;        bash$ view /etc/exim.conf &lt;br /&gt;        bash$ vi /etc/aliases&lt;br /&gt;                  postmaster: your_login_name&lt;br /&gt;        bash$ vi /etc/reslov.conf&lt;br /&gt;                  nameserver 10.0.0.7&lt;br /&gt;                  search your.domain&lt;br /&gt;        bash$ cygrunsrv -I exim -p /usr/bin/exim -e CYGWIN=nontsec   &lt;br /&gt;                  -a &amp;quot;-bdf -q15m&amp;quot; -d &amp;quot;Exim Mail Transfer Agent&amp;quot; &lt;br /&gt;                  -1 /var/log/exim/cygrunsrv_out.log -2 /var/log/exim/cygrunsrv_err.log&lt;br /&gt;        bash$ cygrunsrv -S exim&lt;br /&gt;&lt;/pre&gt; &lt;/dd&gt;&lt;/dl&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;&lt;a name=&quot;_3_11&quot;&gt;&lt;/a&gt;3.11. &lt;strong&gt;Q&lt;/strong&gt; 如何得到 Dos/Windows&lt;a class=&quot;wikipageedit&quot; href=&quot;http://worldhello.net/wiki/C/Cygwin.htm?action=edit&amp;amp;id=Cygwin/Windows&quot;&gt;?&lt;/a&gt; 格式的路径名?&lt;/h3&gt;  &lt;pre&gt;        bash$ cygpath -d -m &amp;quot;`pwd`&amp;quot;&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;&lt;a name=&quot;_3_12&quot;&gt;&lt;/a&gt;3.12. &lt;strong&gt;Q&lt;/strong&gt; Setup Xinetd&lt;/h3&gt;  &lt;ul&gt;&lt;li&gt; start init service &lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;        bash$ /usr/bin/init-config&lt;br /&gt;&lt;/pre&gt; &lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt; chkconfig 工具用来维护 /etc/rc.d 下的脚本 &lt;ul&gt;&lt;li&gt; 若要启动 sshd 执行 &amp;quot;/sbin/chkconfig --add sshd&amp;quot; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt; xinetd config &lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;        bash$ /usr/bin/xinetd-config&lt;br /&gt;&lt;/pre&gt; &lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;&lt;a name=&quot;_3_13&quot;&gt;&lt;/a&gt;3.13. &lt;strong&gt;Q&lt;/strong&gt; other command?&lt;/h3&gt;  &lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt; ttcp, netsnoop &lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;&lt;a name=&quot;_3_14&quot;&gt;&lt;/a&gt;3.14. &lt;strong&gt;Q&lt;/strong&gt; XFree86 under Cygwin?&lt;/h3&gt;  &lt;ul&gt;&lt;li&gt; add /usr/X11R6/bin to PATH; &lt;/li&gt;&lt;li&gt; start Xwindow using startxwin.bat(dos/windows), or startxwin.sh(cygwin); &lt;/li&gt;&lt;li&gt; if has a firewall installed, open port &amp;quot;6000&amp;quot; of local server; &lt;/li&gt;&lt;li&gt; run xclient in local machine, just set environment: export DISPLAY=127.0.0.1:0.0 &lt;/li&gt;&lt;li&gt; if run xclient in remote machine, give authorize to remote host:  &lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt; bash$ /usr/X11R6/bin/xhost remote_hostname_or_ip_address &lt;/dd&gt;&lt;/dl&gt;&lt;/dl&gt;&lt;ul&gt;&lt;li&gt; telnet/ssh to remote host; &lt;/li&gt;&lt;li&gt; set environment DISPLAY, like: export DISPLAY=&amp;lt;IP_of_Cygwin_XFree86&amp;gt;:0.0 &lt;/li&gt;&lt;li&gt; xterm &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;&lt;a name=&quot;_3_15&quot;&gt;&lt;/a&gt;3.15. &lt;strong&gt;Q&lt;/strong&gt; 安装后的设置综述? &lt;/h3&gt;  &lt;ul&gt;&lt;li&gt; binmode or textmode? &lt;/li&gt;&lt;/ul&gt; 执行 &lt;em&gt;mount&lt;/em&gt; 命令，如果不是 textmode，修改注册表  HKEY_LOCAL_MACHINESOFTWARECygnus SolutionsCygwinmounts v2...cygdrive flags。  cygdrive flags是一个DWORD值，&amp;amp;0x2 == 0x2 为 Unix Style，否则为 Dos like style。 &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt; 修改 ~/.inputrc 文件，加入如下内容 &lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;# Ignore case while completing&lt;br /&gt;set completion-ignore-case on&lt;br /&gt;# Make Bash 8bit clean&lt;br /&gt;set meta-flag on&lt;br /&gt;set output-meta on # to show 8-bit characters&lt;br /&gt;set convert-meta off # to show it as character, not the octal representation&lt;br /&gt;&lt;/pre&gt; &lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt; 修改 /etc/profile, 加入如下内容： &lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;set -o vi&lt;br /&gt;&lt;br /&gt;alias less=&amp;#39;/bin/less -r&amp;#39;&lt;br /&gt;alias ls=&amp;#39;/bin/ls -F --color=tty --show-control-chars&amp;#39;&lt;br /&gt;&lt;br /&gt;# glob filenames in a case-insensitive manner&lt;br /&gt;shopt -s nocaseglob&lt;br /&gt;&lt;br /&gt;export SGML_CATALOG_FILES=/share/catalog.sgml&lt;br /&gt;export XML_CATALOG_FILES=/share/catalog.xml&lt;br /&gt;export CYGWIN=&amp;quot;nobinmode nontsec nosmbntsec&amp;quot;&lt;br /&gt;export PATH=$PATH:.&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt; &lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt; 修改登录用户的主要组: &lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;        bash$ vi /etc/passwd&lt;br /&gt;&lt;/pre&gt; &lt;/dd&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt; 默认属于 513 组(对于域控制器是Domain Users，非域控制器为 NONE)，个人偏好设置为 544(Administrator) &lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt; 建立 symbol link: &lt;ul&gt;&lt;li&gt; 因为一些脚本默认的 md5 摘要程序是 md5, 而非 md5sum； &lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;        bash$ ln -s /usr/bin/md5sum /usr/bin/md5&lt;br /&gt;&lt;/pre&gt; &lt;/dd&gt;&lt;/dl&gt;&lt;ul&gt;&lt;li&gt; 设置 DOCBOOK DTD/DSSSL 路径 &lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;        bash$ ln -sf /cygdrive/e/HOME/WORK/johnson_homepage/worldhello/share /share&lt;br /&gt;&lt;/pre&gt; &lt;/dd&gt;&lt;/dl&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&amp;nbsp;&lt;ul&gt;&lt;li&gt; 设置 usemodwiki 路径映射 &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;mkdir /repos&lt;br /&gt;cd /repos/&lt;br /&gt;ln -s /cygdrive/d /d&lt;br /&gt;ln -s /d/HOME/WORK/johnson_homepage/worldhello/usemod JohnsonUseModWiki&lt;br /&gt;ln -s /d/HOME/WORK/johnson_homepage/worldhello/wiki .&lt;br /&gt;&lt;/pre&gt; &lt;/dd&gt;&lt;/dl&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt; 设置建立工作路径 &lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dd&gt;&lt;pre&gt;        bash$ ln -sf /cygdrive/e/HOME/WORK/ ~/work&lt;/pre&gt;&lt;/dd&gt;&lt;/dl&gt; 
</content> 
</entry> 

  
 
  
   
 
 <entry> 
 <id>tag:www.iblog.com,2007-12-21:465106</id>
 <title>老麦的观点</title> 
 <link rel="alternate" type="text/html" href="http://guocongbin.iblog.com/post/1964/465106" /> 
  
 <modified>2007-12-21T06:27:06+0300</modified> 
 <issued>2007-12-21T06:27:06+0300</issued> 
 <created>2007-12-21T06:27:06+0300</created> 
 <summary type="text/plain"> ...</summary> 
 <author> 
  
 <name>guocongbin</name> 
 <url>http://guocongbin.iblog.com</url> 
 <email>guocongbin@gmail.com</email> 
</author> 
<dc:subject>
软件工程 
</dc:subject> 
 <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://guocongbin.iblog.com"> 
 &lt;p&gt;看到孟岩的博客中写到了去听老麦（北航的麦中凡老师）的讲座，不禁让我想起我的大学生活。当时我也读过老麦的C++语言的书，不过没有仔细的读，惭愧啊&lt;img src=&quot;http://www.iblog.com/js/tinymce/plugins/emotions/images/smiley-embarassed.gif&quot; border=&quot;0&quot; alt=&quot;Embarassed&quot; title=&quot;Embarassed&quot; /&gt;。&lt;/p&gt;&lt;p&gt;不过老麦的一些观点还是很切中要害的，例如当然软件行业与行政之间的关系、科学与工程的关系。不过最同意的还是那句&amp;ldquo;有时候是要向中国的实践妥协，但是我们心理要知道这样是不正确的，是因为条件所限。等到将来条件成熟，我们还是要回到正确的道路上来的&amp;rdquo;。 &lt;/p&gt; 
</content> 
</entry> 

  
 
  
   
 
 <entry> 
 <id>tag:www.iblog.com,2007-12-19:464465</id>
 <title>功能强大的diff</title> 
 <link rel="alternate" type="text/html" href="http://guocongbin.iblog.com/post/1964/464465" /> 
  
 <modified>2007-12-19T11:40:50+0300</modified> 
 <issued>2007-12-19T11:40:50+0300</issued> 
 <created>2007-12-19T11:40:50+0300</created> 
 <summary type="text/plain">diff是一个不被重视的命令，不被重视是因为所有人都觉得它很简单，都觉得没有什么可以研究的，但是事实并非如此。diff是一个不被重视的命令， ...</summary> 
 <author> 
  
 <name>guocongbin</name> 
 <url>http://guocongbin.iblog.com</url> 
 <email>guocongbin@gmail.com</email> 
</author> 
<dc:subject>
Unix 
Linux 
bash 
</dc:subject> 
 <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://guocongbin.iblog.com"> 
 diff是一个不被重视的命令，不被重视是因为所有人都觉得它很简单，都觉得没有什么可以研究的，但是事实并非如此。diff是一个不被重视的命令，不被重视是因为所有人都觉得它很简单，都觉得没有什么可以研究的，但是事实并非如此。&lt;br /&gt;一般情况下，diff的输出是不便阅读的，例如&lt;br /&gt;&lt;div style=&quot;border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%; font-family: Courier New&quot;&gt;&lt;div&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;span style=&quot;font-weight: bold&quot;&gt;$diff&amp;nbsp;diff.txt&amp;nbsp;diff.info&lt;/span&gt;&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;2c2&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;the&amp;nbsp;info&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;about&amp;nbsp;diff&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;---&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;3a4&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;**********************&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;7c8&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;diff&amp;nbsp;OPTIONS...&amp;nbsp;FILES...&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;lt;-&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;usage&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;---&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;diff&amp;nbsp;OPTIONS...&amp;nbsp;FILES...&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;14c15&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;(it&amp;nbsp;isn&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;t&amp;nbsp;simple)If&amp;nbsp;one&amp;nbsp;file&amp;nbsp;is&amp;nbsp;a&amp;nbsp;directory&amp;nbsp;and&amp;nbsp;the&amp;nbsp;other&amp;nbsp;is&amp;nbsp;not,&amp;nbsp;`diff&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;compares&amp;nbsp;the&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;---&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;If&amp;nbsp;one&amp;nbsp;file&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;a&amp;nbsp;directory&amp;nbsp;and&amp;nbsp;the&amp;nbsp;other&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;not,&amp;nbsp;`diff&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;compares&amp;nbsp;the&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;那么如何让diff的输出更加易读呢，可以使用-y参数&lt;br /&gt;&lt;div style=&quot;border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%; font-family: Courier New&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;span style=&quot;font-weight: bold&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;$diff -yt diff.txt diff.info&lt;br /&gt;File: diff.info,&amp;nbsp; Node: Invoking diff,&amp;nbsp; Next: Invoking diff3,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; File: diff.info,&amp;nbsp; Node: Invoking diff,&amp;nbsp; Next: Invoking diff3,&lt;br /&gt;&lt;br /&gt;the info is about diff&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;13 Invoking `diff&amp;#39;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 13 Invoking `diff&amp;#39;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;nbsp; **********************&lt;br /&gt;&lt;br /&gt;The format for running the `diff&amp;#39; command is:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The format for running the `diff&amp;#39; command is:&lt;br /&gt;&lt;br /&gt;diff OPTIONS... FILES... &amp;lt;- usage&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; diff OPTIONS... FILES...&lt;br /&gt;&lt;br /&gt;In the simplest case, two file names FROM-FILE and TO-FILE are&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; In the simplest case, two file names FROM-FILE and TO-FILE are&lt;br /&gt;given, and `diff&amp;#39; compares the contents of FROM-FILE and TO-FIL&amp;nbsp;&amp;nbsp;&amp;nbsp; given, and `diff&amp;#39; compares the contents of FROM-FILE and TO-FIL&lt;br /&gt;&lt;br /&gt;file name of `-&amp;#39; stands for text read from the standard input.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; file name of `-&amp;#39; stands for text read from the standard input.&lt;br /&gt;&lt;br /&gt;special case, `diff - -&amp;#39; compares a copy of standard input to i&amp;nbsp;&amp;nbsp;&amp;nbsp; special case, `diff - -&amp;#39; compares a copy of standard input to i&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(it isn&amp;#39;t simple)If one file is a directory and the other is no |&amp;nbsp; If one file is a directory and the other is not, `diff&amp;#39; compare&lt;br /&gt;&lt;br /&gt;file in the directory whose name is that of the non-directory.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; file in the directory whose name is that of the non-directory.&lt;br /&gt;&lt;br /&gt;non-directory file must not be `-&amp;#39;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; non-directory file must not be `-&amp;#39;.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;这种side by side的效果就比较方便了。&lt;br /&gt;掌握了diff的简单参数对于使用cvs命令行的人是个福音，因为在cvs diff的时候，也是可以制定这些参数的，这样在看两个版本的代码的时候就很方便了&lt;br /&gt;&lt;span class=&quot;Title&quot;&gt;diff的高级功能&lt;/span&gt;&lt;br /&gt;diff在如何显示结果的问题上面，为用户提供了很大的定制空间。下面我们就让diff的输出有颜色，至少可以达到windiff的效果&lt;br /&gt;对于如何在终端上面显示颜色的问题，可以参考我的&lt;a href=&quot;http://blog.csdn.net/guocongbin/archive/2007/11/11/1878764.aspx&quot;&gt;另外一篇博客&lt;/a&gt;&lt;br /&gt;diff提供了几个选项&lt;br /&gt;&lt;div style=&quot;border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%; font-family: Courier New&quot;&gt;&lt;div&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;line&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;format&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;line&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;format&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;old&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;line&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;format&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;unchanged&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;line&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;format&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;old&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;group&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;format&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;group&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;format&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;changed&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;group&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;format&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;unchanged&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;group&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;format&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;几个选项的具体含义可以参考diff的info。&lt;br /&gt;下面我们就如此定制一下diff的输出&lt;br /&gt;&lt;div style=&quot;border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%&quot;&gt;&lt;div&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;&lt;span style=&quot;color: #000000&quot;&gt;$diff&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;old&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;line&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;^[[1;31;47m&amp;lt;^[[1;31;40m&amp;nbsp;%l^[[m&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;--new-line-format=&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;[[&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;33&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;;44m&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;gt;^&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;[[&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;33&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;;40m&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;[[m&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;--unchanged-line-format=&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;[[&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;;32m&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;[[m&lt;br /&gt;&lt;img src=&quot;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif&quot; border=&quot;0&quot; align=&quot;top&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;diff.txt&amp;nbsp;diff.info&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;输出效果如下&lt;br /&gt;&lt;img src=&quot;http://p.blog.csdn.net/images/p_blog_csdn_net/guocongbin/diff.PNG&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;这样的输出还是很漂亮的吧&lt;br /&gt;而且这样指定输出格式的选项可以完全的使用在cvs diff当中的哦&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;Title&quot;&gt;side by side的更漂亮的diff&lt;/span&gt;&lt;br /&gt;在windows下面有很多很好的diff工具，像windiff和ultra edit里面的diff根本就不友好，效果也很烂，一块红一块黄的，看着很伤眼睛。&lt;br /&gt;windows下面最好的diff工具，我认为是beyond compare，简称bc。&lt;br /&gt;但是在&amp;times;nix下面，情况是如何呢？我在linux里面，一直使用vimdiff，效果也是很不错的，几乎可以达到一个字符界面的工具能达到的顶峰了。&lt;br /&gt;不过vimdiff有一个问题是和cvs结合不够紧密，如果想在执行cvsdiff之后能够自动弹出一个vimdif的界面，是需要有一些插件支持的。&lt;br /&gt;那么怎么办呢？其实我们可以继续从diff自身挖掘出新的东西来。&lt;br /&gt;上面说的，使用-y参数可以是diff的输出成为左右两列，对比两个版本，我们就以这个为基础，结合awk，sed等工具，以及term对颜色的支持，实现vimdiff中能够达到的效果。&lt;br /&gt;下面就是一个效果的截图&lt;br /&gt;&lt;img src=&quot;http://p.blog.csdn.net/images/p_blog_csdn_net/guocongbin/cdiff.PNG&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;怎么样，还是很炫的吧。&lt;br /&gt;其实达到这个效果哦很容易，下面就是脚本cdiff的内容&lt;br /&gt;&lt;div style=&quot;border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%&quot;&gt;&amp;nbsp; 1 #!/bin/bash&lt;br /&gt;&amp;nbsp; 2 [[ $# &amp;gt; 0 ]] &amp;amp;&amp;amp; width=$1 || width=130&lt;br /&gt;&amp;nbsp; 3 ((halfWidth=width/2))&lt;br /&gt;&amp;nbsp; 4 ((sepIndex=halfWidth -1 ))&lt;br /&gt;&amp;nbsp; 5 colorEnd=&amp;quot; 33[m&amp;quot;&lt;br /&gt;&amp;nbsp; 6 missing=&amp;quot; 33[1;34;46m&amp;quot;&lt;br /&gt;&amp;nbsp; 7 changedLeft=&amp;quot; 33[1;37;45m&amp;quot;&lt;br /&gt;&amp;nbsp; 8 changedRight=&amp;quot; 33[1;33;45m&amp;quot;&lt;br /&gt;&amp;nbsp; 9 orphan=&amp;quot; 33[1;37;44m&amp;quot;&lt;br /&gt;&amp;nbsp;10 common=&amp;quot; 33[1;32;40m&amp;quot;&lt;br /&gt;&amp;nbsp;11 sep=^A&lt;br /&gt;&amp;nbsp;12 input=-&lt;br /&gt;&amp;nbsp;13 cat $input|sed &amp;quot;s/^(.{$sepIndex})(.)/1$sep2$sep/&amp;quot;|awk -F$sep -f &amp;lt;(echo &amp;#39;&lt;br /&gt;&amp;nbsp;14 $2==&amp;quot;|&amp;quot; {printf &amp;#39;&amp;quot;$changedLeft%s$colorEnd%s$changedRight%-${halfWidth}s$colorEndn&amp;quot;&amp;#39;, $1, $2, $3}&lt;br /&gt;&amp;nbsp;15 $2==&amp;quot;&amp;gt;&amp;quot; {gsub(/ /,&amp;quot;-&amp;quot;,$1); printf &amp;#39;&amp;quot;$missing%s$colorEnd%s$orphan%-${halfWidth}s$colorEndn&amp;quot;&amp;#39;, $1, $2, $3}&lt;br /&gt;&amp;nbsp;16 $2==&amp;quot;&amp;lt;&amp;quot; {&lt;br /&gt;&amp;nbsp;17&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # fill $3 with &amp;quot;-&amp;quot;&lt;br /&gt;&amp;nbsp;18&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $3=&amp;quot;&amp;nbsp; ---------------------------------------------------------------------------&amp;quot;&lt;br /&gt;&amp;nbsp;19&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf &amp;#39;&amp;quot;$orphan%s$colorEnd%s$missing%-${halfWidth}s$colorEndn&amp;quot;&amp;#39;, $1, $2, substr($3, 0, &amp;#39;$halfWidth&amp;#39;)&lt;br /&gt;&amp;nbsp;20 }&lt;br /&gt;&amp;nbsp;21 $2==&amp;quot; &amp;quot; {printf &amp;#39;&amp;quot;$common%s%s$common%-${halfWidth}s$colorEndnn&amp;quot;&amp;#39;, $1, $2, $3}&lt;br /&gt;&amp;nbsp;22 &amp;#39;)&lt;br /&gt;&amp;nbsp;23&lt;br /&gt;&lt;/div&gt;不过，美中不足，就是还不能实现对一行中单词的比较，对有区别的单词进行高亮，完全达到vimdiff和bc的效果。&lt;br /&gt;&lt;br /&gt;现在就把整个的代码都贴出来，这个脚本名为cdiff，就是colorful diff的意思&lt;br /&gt;可以支出如下的几种用法&lt;br /&gt;cdiff file1 file2, cat file1 |cdiff - file2 ， 效果如图一&lt;br /&gt;cdiff -y file1 file2 ,diff -y file1 file2 |cdiff，效果如图二&lt;br /&gt;cvs diff file |cdiff，效果如下&lt;br /&gt;&lt;img src=&quot;http://p.blog.csdn.net/images/p_blog_csdn_net/guocongbin/cvsdiff.PNG&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;代码在这里&lt;br /&gt;&lt;div style=&quot;border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;span style=&quot;font-family: Courier New&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: Courier New&quot;&gt;1&amp;nbsp;#!/bin/bash&lt;br /&gt;&amp;nbsp;&amp;nbsp;2&amp;nbsp;usage()&lt;br /&gt;&amp;nbsp;&amp;nbsp;3&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-family: Courier New&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: Courier New&quot;&gt;&amp;nbsp;&amp;quot;$0&amp;nbsp;[-w&amp;nbsp;&amp;lt;width&amp;gt;]&amp;nbsp;[file1]&amp;nbsp;[file2]&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;5&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;6&amp;nbsp;defaultWidth=125&amp;nbsp;#&amp;nbsp;default&amp;nbsp;output&amp;nbsp;width&amp;nbsp;of&amp;nbsp;diff&amp;nbsp;-y&lt;br /&gt;&amp;nbsp;&amp;nbsp;7&amp;nbsp;width=$defaultWidth&lt;br /&gt;&amp;nbsp;&amp;nbsp;8&lt;br /&gt;&amp;nbsp;&amp;nbsp;9&amp;nbsp;#&amp;nbsp;get&amp;nbsp;the&amp;nbsp;options,&amp;nbsp;just&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-family: Courier New&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: Courier New&quot;&gt;&amp;nbsp;-y&amp;nbsp;and&amp;nbsp;-W&amp;nbsp;specified&lt;br /&gt;&amp;nbsp;10&amp;nbsp;columnOutput=0&lt;br /&gt;&amp;nbsp;11&amp;nbsp;while&amp;nbsp;getopts&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #800000; font-family: Courier New&quot;&gt;:yW&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: Courier New&quot;&gt;:&amp;nbsp;options&lt;br /&gt;&amp;nbsp;12&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-family: Courier New&quot;&gt;do&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: Courier New&quot;&gt;&lt;br /&gt;&amp;nbsp;13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case&amp;nbsp;$options&amp;nbsp;in&lt;br /&gt;&amp;nbsp;14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;y)columnOutput=1;;&lt;br /&gt;&amp;nbsp;15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;W)width=$OPTARG;;&lt;br /&gt;&amp;nbsp;16&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;?);;&lt;br /&gt;&amp;nbsp;17&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;esac&lt;br /&gt;&amp;nbsp;18&amp;nbsp;done&lt;br /&gt;&amp;nbsp;19&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-family: Courier New&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: Courier New&quot;&gt;&amp;nbsp;[[&amp;nbsp;$OPTIND&amp;nbsp;-gt&amp;nbsp;$#&amp;nbsp;]]&amp;nbsp;;&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-family: Courier New&quot;&gt;then&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: Courier New&quot;&gt;&lt;br /&gt;&amp;nbsp;20&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;no&amp;nbsp;filename,&amp;nbsp;therefore&amp;nbsp;the&amp;nbsp;input&amp;nbsp;from&amp;nbsp;pipe,&amp;nbsp;and&amp;nbsp;the&amp;nbsp;input&amp;nbsp;is&amp;nbsp;must&amp;nbsp;be&amp;nbsp;a&amp;nbsp;output&amp;nbsp;of&amp;nbsp;diff&amp;nbsp;-y&lt;br /&gt;&amp;nbsp;21&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;diffInput=1&lt;br /&gt;&amp;nbsp;22&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;columnOutput=1&lt;br /&gt;&amp;nbsp;23&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-family: Courier New&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: Courier New&quot;&gt;&lt;br /&gt;&amp;nbsp;24&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file1=$$OPTIND&lt;br /&gt;&amp;nbsp;25&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[[&amp;nbsp;$#&amp;nbsp;-gt&amp;nbsp;`expr&amp;nbsp;$OPTIND&amp;nbsp;+&amp;nbsp;1`&amp;nbsp;]]&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;file2=$`expr&amp;nbsp;$OPTIND&amp;nbsp;+&amp;nbsp;2`&amp;nbsp;||&amp;nbsp;file2=-&lt;br /&gt;&amp;nbsp;26&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[[&amp;nbsp;$#&amp;nbsp;-gt&amp;nbsp;`expr&amp;nbsp;$OPTIND&amp;nbsp;+&amp;nbsp;2`&amp;nbsp;]]&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-family: Courier New&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: Courier New&quot;&gt;&amp;nbsp;&amp;quot;Warning:&amp;nbsp;too&amp;nbsp;many&amp;nbsp;files&amp;nbsp;to&amp;nbsp;be&amp;nbsp;compared&amp;quot;&amp;nbsp;&amp;gt;&amp;amp;2&lt;br /&gt;&amp;nbsp;27&amp;nbsp;fi&lt;br /&gt;&amp;nbsp;28&lt;br /&gt;&amp;nbsp;29&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-family: Courier New&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: Courier New&quot;&gt;&amp;nbsp;[[&amp;nbsp;$columnOutput&amp;nbsp;-eq&amp;nbsp;1&amp;nbsp;]];&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-family: Courier New&quot;&gt;then&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: Courier New&quot;&gt;&lt;br /&gt;&amp;nbsp;30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;((halfWidth=width&amp;nbsp;/2))&lt;br /&gt;&amp;nbsp;31&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;((sepIndex=halfWidth&amp;nbsp;-1&amp;nbsp;))&lt;br /&gt;&amp;nbsp;32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;colorEnd=&amp;quot;[m&amp;quot;&lt;br /&gt;&amp;nbsp;33&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;missing=&amp;quot;[1;34;46m&amp;quot;&lt;br /&gt;&amp;nbsp;34&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;changedLeft=&amp;quot;[1;37;45m&amp;quot;&lt;br /&gt;&amp;nbsp;35&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;changedRight=&amp;quot;[1;33;45m&amp;quot;&lt;br /&gt;&amp;nbsp;36&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;orphan=&amp;quot;[1;37;44m&amp;quot;&lt;br /&gt;&amp;nbsp;37&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;common=&amp;quot;[1;32;40m&amp;quot;&lt;br /&gt;&amp;nbsp;38&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nondiff=&amp;quot;[1;31;40m&amp;quot;&lt;br /&gt;&amp;nbsp;39&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sep=&amp;quot;^A&amp;quot;&lt;br /&gt;&amp;nbsp;40&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;in&amp;nbsp;order&amp;nbsp;to&amp;nbsp;compatible&amp;nbsp;with&amp;nbsp;output&amp;nbsp;cvs&amp;nbsp;diff,&amp;nbsp;which&amp;nbsp;contain&amp;nbsp;some&amp;nbsp;lines&amp;nbsp;that&amp;nbsp;isn&amp;#39;t&amp;nbsp;in&amp;nbsp;diff&amp;nbsp;-y&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-family: Courier New&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: Courier New&quot;&gt;&lt;br /&gt;&amp;nbsp;41&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;we&amp;nbsp;need&amp;nbsp;to&amp;nbsp;judge&amp;nbsp;which&amp;nbsp;lines&amp;nbsp;is&amp;nbsp;in&amp;nbsp;diff&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-family: Courier New&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: Courier New&quot;&gt;&lt;br /&gt;&amp;nbsp;42&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;([[&amp;nbsp;$diffInput&amp;nbsp;-eq&amp;nbsp;1&amp;nbsp;]]&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;cat&amp;nbsp;-&amp;nbsp;||&amp;nbsp;diff&amp;nbsp;&amp;quot;$@&amp;quot;&amp;nbsp;-y&amp;nbsp;)|expand|&lt;br /&gt;&amp;nbsp;43&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sed&amp;nbsp;&amp;quot;s/^(.{$sepIndex})&amp;nbsp;([&amp;nbsp;&amp;gt;&amp;lt;|])/$sep$sep/&amp;quot;|awk&amp;nbsp;-F$sep&amp;nbsp;-f&amp;nbsp;&amp;lt;(&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-family: Courier New&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: Courier New&quot;&gt;&amp;nbsp;&amp;#39;&lt;br /&gt;&amp;nbsp;44&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$2==&amp;quot;|&amp;quot;&amp;nbsp;{printf&amp;nbsp;&amp;#39;&amp;quot;$changedLeft%s$colorEnd&amp;nbsp;%s$changedRight%-${halfWidth}s$colorEndn&amp;quot;&amp;#39;,&amp;nbsp;$1,&amp;nbsp;$2,&amp;nbsp;$3}&lt;br /&gt;&amp;nbsp;45&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$2==&amp;quot;&amp;gt;&amp;quot;&amp;nbsp;{gsub(/&amp;nbsp;/,&amp;quot;-&amp;quot;,$1);&amp;nbsp;printf&amp;nbsp;&amp;#39;&amp;quot;$missing%s$colorEnd&amp;nbsp;%s$orphan%-${halfWidth}s$colorEndn&amp;quot;&amp;#39;,&amp;nbsp;$1,&amp;nbsp;$2,&amp;nbsp;$3}&lt;br /&gt;&amp;nbsp;46&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$2==&amp;quot;&amp;lt;&amp;quot;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;47&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;fill&amp;nbsp;$3&amp;nbsp;with&amp;nbsp;&amp;quot;-&amp;quot;&lt;br /&gt;&amp;nbsp;48&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$3=&amp;quot;&amp;nbsp;&amp;nbsp;---------------------------------------------------------------------------&amp;quot;&lt;br /&gt;&amp;nbsp;49&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf&amp;nbsp;&amp;#39;&amp;quot;$orphan%s$colorEnd&amp;nbsp;%s$missing%-${halfWidth}s$colorEndn&amp;quot;&amp;#39;,&amp;nbsp;$1,&amp;nbsp;$2,&amp;nbsp;substr($3,&amp;nbsp;0,&amp;nbsp;&amp;#39;$halfWidth&amp;#39;)&lt;br /&gt;&amp;nbsp;50&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;51&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$2==&amp;quot;&amp;nbsp;&amp;quot;&amp;nbsp;{printf&amp;nbsp;&amp;#39;&amp;quot;$common%s&amp;nbsp;%s$common%-${halfWidth}s$colorEndnn&amp;quot;&amp;#39;,&amp;nbsp;$1,&amp;nbsp;$2,&amp;nbsp;$3}&lt;br /&gt;&amp;nbsp;52&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$2!=&amp;quot;&amp;nbsp;&amp;quot;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;$2!=&amp;quot;|&amp;quot;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;$2!=&amp;quot;&amp;gt;&amp;quot;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;$2!=&amp;quot;&amp;lt;&amp;quot;&amp;nbsp;{printf&amp;nbsp;&amp;#39;&amp;quot;$nondiff%s$colorEndnn&amp;quot;&amp;#39;,&amp;nbsp;$0&amp;nbsp;}&lt;br /&gt;&amp;nbsp;53&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;)&lt;br /&gt;&amp;nbsp;54&amp;nbsp;else&lt;br /&gt;&amp;nbsp;55&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;diff&amp;nbsp;&amp;quot;$@&amp;quot;&amp;nbsp;--old-line-format=&amp;quot;^[[1;31;47m&amp;lt;^[[1;31;40m&amp;nbsp;%l^[[m&lt;br /&gt;&amp;nbsp;56&amp;nbsp;&amp;quot;&amp;nbsp;--new-line-format=&amp;quot;^[[1;33;44m&amp;gt;^[[1;33;40m&amp;nbsp;%l^[[m&lt;br /&gt;&amp;nbsp;57&amp;nbsp;&amp;quot;&amp;nbsp;--unchanged-line-format=&amp;quot;^[[1;32m=&amp;nbsp;%l^[[m&lt;br /&gt;&amp;nbsp;58&amp;nbsp;&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; 
</content> 
</entry> 

  
 
</feed>