<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>reality &#187; shellscript</title>
	<atom:link href="http://www.reality.hk/articles/tag/shellscript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.reality.hk</link>
	<description>Reality is merely an illusion, albeit a very persistent one.</description>
	<lastBuildDate>Sun, 05 Sep 2010 14:37:02 +0000</lastBuildDate>
	<language>zh-tw</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>在Unix下快速更改檔名</title>
		<link>http://www.reality.hk/articles/2006/03/06/589/</link>
		<comments>http://www.reality.hk/articles/2006/03/06/589/#comments</comments>
		<pubDate>Mon, 06 Mar 2006 08:28:38 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[shellscript]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://www.siuying.net/articles/2006/03/06/589/</guid>
		<description><![CDATA[在Windows中如果需要把大量檔案改名，我會使用專用的改名軟件。在Unix中當然也有類似的軟件，不過很多時自行用一行的command己可滿足需要了： {[.src /enzymes/chili-js.php]}]]></description>
			<content:encoded><![CDATA[<p>在Windows中如果需要把大量檔案改名，我會使用專用的改名軟件。在Unix中當然也有類似的軟件，不過很多時自行用一行的command己可滿足需要了：</p>
<p>{[.src /enzymes/chili-js.php]}</p>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2006/03/06/589/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unix和Windows間的文字檔轉換</title>
		<link>http://www.reality.hk/articles/2005/11/18/524/</link>
		<comments>http://www.reality.hk/articles/2005/11/18/524/#comments</comments>
		<pubDate>Fri, 18 Nov 2005 08:26:15 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[shellscript]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://www.siuying.net/?p=524</guid>
		<description><![CDATA[在用電報通訊的年代，人們發明了一種用7bits把常用的英文和標點編碼的方法 -- 這就是至今還在電腦世界應用的ASCII。

電報機每當打印到一行結尾時便需要「跳進下一行」並「回到第一格」，因此ASCII有LF(Line Feed, 0x0A) 和CR(Carriage Return, 0x0D)這兩個字符。在電腦的世其實並不需要用兩個字符代表「下一行」的意思，為了省資源在設計OS時有些人就決定用其中一個字符代表「下一行」<footnote>LF：Unix; CR：Apple II, Mac OS 9 or less; CR+LF：DOS, Windows</footnote>，這就做成了不同系統的「下一行」符號不同的問題。]]></description>
			<content:encoded><![CDATA[<p>在用電報通訊的年代，人們發明了一種用7bits把常用的英文和標點編碼的方法 &#8212; 這就是至今還在電腦世界應用的ASCII。</p>
<p>電報機每當打印到一行結尾時便需要「跳進下一行」並「回到第一格」，因此ASCII有LF(Line Feed, 0x0A) 和CR(Carriage Return, 0x0D)。在電腦的世其實並不需要用兩個字符代表「下一行」的意思，為了省資源，在設計OS時一些人就決定用其中一個字符代表「下一行」LF：Unix; CR：Apple II, Mac OS 9 or less; CR+LF：DOS, Windows，因為大家選擇不同，做成了不同系統的「下一行」符號不同的問題。</p>
<p>這問題常見於在 Windows 上傳一些檔案到 Unix Server 中，如果不經轉換 Unix 會見到一些古怪符號 (顯示成^M的CR字符)。如果己經有一堆Windows的文字檔，怎樣把它們轉換成Unix的文字檔？不用自己寫轉換軟件，你可以使用Unix command <strong>tr (translate) </strong>或 <strong>sed (Stream Editor)</strong>：</p>
<p>{[.src /enzymes/java.php]}</p>
<h3>相關連結：</h3>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Newline">Newline</a> from Wikipedia</li>
<li><a href="http://sed.sourceforge.net/sed1line.txt">HANDY ONE-LINERS FOR SED</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2005/11/18/524/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>放個Trap去你的Script中</title>
		<link>http://www.reality.hk/articles/2005/08/08/463/</link>
		<comments>http://www.reality.hk/articles/2005/08/08/463/#comments</comments>
		<pubDate>Mon, 08 Aug 2005 15:22:39 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[shellscript]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://www.siuying.net/?p=463</guid>
		<description><![CDATA[寫Shell Script時常常會有機會要用到暫存檔，通常在程式完結後這些暫存檔都會被移除。然而，單靠程式自己在每個離開的條件前移除垃圾很多時並不足夠。本篇將會試著用<strong>trap</strong>把所有離開的條件都捕捉下來，讓我們的shell script永遠都懂得清理自己的所作所為！]]></description>
			<content:encoded><![CDATA[<p>寫Shell Script時常常會有機會要用到暫存檔，通常在程式完結後這些暫存檔都會被移除。然而，單靠程式自己在每個離開的條件前移除垃圾並不安全。本篇將會試著用<strong>trap</strong>把所有離開的條件都捕捉下來，讓我們的shell script永遠都懂得清理自己的所作所為！</p>
<p><span id="more-463"></span></p>
<p>在Shell Script中使用和移除暫存檔，最簡單的方式是這樣&#8230;</p>
<blockquote>
<h4>例一：</h4>
<p>{[.src-1 /enzymes/java.php]}</p>
</blockquote>
<p>這種方式的理念是，無論過程裏發生甚麼事，只要記得在script的最尾把它移除就可以了。這種方式的問題是當程式增長的時候，很可能你需要在中途中離開。例如想測試用者是否輸入了必須的argument &#8230;</p>
<blockquote>
<h4>例二：</h4>
<p>{[.src-2 /enzymes/java.php]}</p>
</blockquote>
<p>這裏的exit 1代表輸入不符預期，程式不正常地終止。但如果你把程式執行就會發現暫存檔沒有隨程式中斷而移除！我們必須要在每一個離開的條件前加清理的程式，但這會很累&#8230; 通常我們會將清理的源碼放在一個function裏，如例三。</p>
<blockquote>
<h4>例三：</h4>
<p>{[.src-3 /enzymes/java.php]}</p>
</blockquote>
<p>這段源碼的處理方式比之前好，但是如果有個新手程式員要接手你的程式，很可能他會忘記在他新增的中斷的條件前把暫存檔移除！當然你可以千叮萬囑、或者在文件中列明，<strong>但這還得靠程式員的記性，這可靠嗎</strong>？</p>
<p>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2005/08/08/463/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>自動備份</title>
		<link>http://www.reality.hk/articles/2005/06/02/414/</link>
		<comments>http://www.reality.hk/articles/2005/06/02/414/#comments</comments>
		<pubDate>Thu, 02 Jun 2005 13:52:30 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[shellscript]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://www.siuying.net/?p=414</guid>
		<description><![CDATA[為免再次錯過備份的機會，寫了一個較完整的script：它會把重要的檔案壓縮到一安全的地方再把它寄去指定電郵信箱，如果檔案大過指定的大小它還會用外部程式splitpea將之分割成指定大小。就這樣，每晚它都把重要資料寄去gmail，只要再在gmail設定filter把檔案分類安放，每天自動備份就完成了！]]></description>
			<content:encoded><![CDATA[<p>為免再次錯過備份的機會，寫了一個較完整的script：它會把重要的檔案壓縮到一安全的地方再把它寄去指定電郵信箱，如果檔案大過指定的大小它還會用外部程式splitpea將之分割成指定大小。就這樣，每晚它都把重要資料寄去gmail，只要再在gmail設定filter把檔案分類安放，每天自動備份就完成了！</p>
<p>基本上功能都足夠了，只差自動把舊檔案移除吧&#8230;</p>
<p><span id="more-414"></span></p>
<p><viewcode src="http://www.siuying.net/~siuying/code/backup.sh"/></p>
<p><strong>連結：</strong></p>
<ul>
<li><a href="http://www.doxxx.net/splitpea">splitpea</a> &#8211; 用python寫成的小軟件，將檔案分割成指定大小</li>
<li><a href="http://www.mutt.org/">mutt</a> &#8211; command line下的電郵工具</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2005/06/02/414/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>善用diff和patch</title>
		<link>http://www.reality.hk/articles/2004/08/31/268/</link>
		<comments>http://www.reality.hk/articles/2004/08/31/268/#comments</comments>
		<pubDate>Tue, 31 Aug 2004 15:24:38 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[shellscript]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[versioncontrol]]></category>

		<guid isPermaLink="false">http://www.siuying.net/articles/2004/08/31/268/</guid>
		<description><![CDATA[Unix有許多方便的工具，善用他們可以讓開發者和系統管理員的工作效率倍增，這次我會介紹一下diff和patch。]]></description>
			<content:encoded><![CDATA[<p>Unix有許多方便的工具，善用他們可以讓開發者和系統管理員的工作效率倍增，這次我會介紹一下diff和patch。</p>
<p><span id="more-268"></span></p>
<p>diff就如其名，是一個找出不同的工具。它可以比較兩個檔案或者兩個目錄下的檔案。</p>
<p>diff的最簡單的用法如下：</p>
<p><code>diff file1 file2</code></p>
<p>例如：</p>
<p><code>diff ESDMain.java ESDMain.new.java</code></p>
<p>這個指令可能有以下輸出&#8230;</p>
<blockquote><p><code>545c545<br />
<                         System.out.println("added");<br />
---<br />
>                         logger.info("added");<br />
548c548,549<br />
<                         System.out.println("not added");<br />
---<br />
>                         // popup error details<br />
>                         logger.info("not added");<br />
</code></p></blockquote>
<p>以&lt;為首是舊檔案的程式碼，而以&gt;為首則是新檔案的程式碼。其中548c548,549表示548行的code被換為548和549行。</p>
<p>diff也可以讓我們記錄兩個版本的source directory的分別，並制作成patch讓其他有舊版源碼的人可以簡單地更新源碼。很多時在Linux或者其他open source的討論區人們自制更新時也會用patch的方式上傳，因為同一個檔案可能被多人同時更改，使用patch可以減少變更衝突的機會，也同時清楚顯示了更新的地方。</p>
<p>要制作patch可用如下指令：</p>
<p><code>diff -ruN src-1.0 src-1.1</code></p>
<p>這裏的r是recursive，u是顯示出上下三行共通的程式碼以方便開發人員找出更新的地方，N則是把新增的檔案也記錄。看看<a href="/~siuying/tutorial/patch.txt">這個patch檔案</a>會給你一些概念。</p>
<p>有了patch檔當然也需要知道patch程式的用法：</p>
<p><code>patch -p1 < ..\patch.txt</code></p>
<p>這裏的-p1是指patch中記錄的第一個directory略去，而&lt;則是將patch.txt的內容輸入到patch指令中。執行指令後如無錯誤畫面會顯示出每個被更新的檔案，如果有衝突它會顯示警告，將同樣的patch執行兩次則可以將patch回復。</p>
<p>這裏只是簡介了這兩個程式的其中一些用法，想更加了解它們你需要執行diff --help或patch --help。</p>
<p>當然，如果你的開發隊伍己有一些完善的版本管理系統那大可以不用人手diff和patch，但如果只是自己一丁友或者圍內幾個人幹，那每晚也制作一個版本記錄會是一個好點子。這樣不單可以讓可能發生的錯誤輕易地回復，也可以讓開發者清楚源碼的更新。</p>
<p>相關連結：<br />
<a href="http://gnuwin32.sourceforge.net/packages.html">GNUWin32</a> - 包括patch和diff在內的unix程式的windows版本</p>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2004/08/31/268/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
