程式扎記: [Linux 常見問題] Linux 與 Dos 斷行的差異

標籤

2012年2月13日 星期一

[Linux 常見問題] Linux 與 Dos 斷行的差異

前言 : (轉載自 這裡
我們在第七章裡面談到 cat 這個指令時,曾經提到過 DOS 與 Linux 斷行字元的不同。 而我們也可以利用 cat -A 來觀察以 DOS (Windows 系統) 建立的檔案的特殊格式, 也可以發現在 DOS 使用的斷行字元為 ^M$ ,我們稱為 CR 與 LF 兩個符號。 而在 Linux 底下,則是僅有 LF ($) 這個斷行符號。這個斷行符號對於 Linux 的影響很大喔! 為什麼呢?
我們說過,在 Linux 底下的指令在開始執行時,他的判斷依據是 『Enter』,而 Linux 的 Enter 為 LF 符號, 不過,由於 DOS 的斷行符號是 CRLF ,也就是多了一個 ^M 的符號出來, 在這樣的情況下,如果是一個 shell script 的程式檔案,呵呵~將可能造成『程式無法執行』的狀態~ 因為他會誤判程式所下達的指令內容啊!這很傷腦筋吧!
那怎麼辦啊?很簡單啊,將格式轉換成為 Linux 即可啊!『廢話』,這當然大家都知道,但是, 要以 vi 進入該檔案,然後一個一個刪除每一行的 CR 嗎?當然沒有這麼沒人性啦! 我們可以透過簡單的指令來進行格式的轉換啊!


dos2unix & unix2dos使用說明 : 
[root@www ~]# dos2unix [-kn] file [newfile] 
[root@www ~]# unix2dos [-kn] file [newfile] 
選項與參數: 
-k :保留該檔案原本的 mtime 時間格式 (不更新檔案上次內容經過修訂的時間) 
-n :保留原本的舊檔,將轉換後的內容輸出到新檔案,如: dos2unix -n old new 

使用範例 : 
* 將 file.txt 的斷行改成 unix 斷行. 
tw-descartes3:~/test1 # cat -A file.txt <檢查file.txt的斷行> 
line1^M$  
line2^M$ 
line3 
tw-descartes3:~/test1 # ll file.txt <檢查原始檔案大小> 
-rw------- 1 root root 19 Nov 18 22:03 file.txt 
tw-descartes3:~/test1 # dos2unix -k file.txt 
dos2unix: converting file file.txt to UNIX format ... 
tw-descartes3:~/test1 # cat -A file.txt 
line1$  
line2$ 
line3tw-descartes3:~/test1 # ll file.txt 
-rw------- 1 root root 17 Nov 18 22:03 file.txt <斷行由Dos 改為 Linux檔案會變小> 

補充說明 : 
為斷行字符以及 DOS 與 Linux 作業系統底下一些字符的定義不同,因此, 不建議你在 Windows 系統當中將檔案編輯好之後,才上傳到 Linux 系統,會容易發生錯誤問題。 而且,如果你在不同的系統之間複製一些純文字檔案時,千萬記得要使用 unix2dos 或 dos2unix 來轉換一下斷行格式啊! 

1 則留言:

網誌存檔