話首語:設計模式感悟,如果把自己成功做成某件事情的過程,回憶並加以總結,形成了經驗,這就是積累。
dos格式檔案傳輸到unix系統時,會在每行的結尾多一個^M,當然也有可能看不到,但是在vi的時候,會在下面顯示此檔案的格式,比如 "dos.txt" [dos] 120L, 2532C 字樣,表示是一個[dos]格式檔案,如果是MAC系統的,會顯示[MAC], 正常顯示則是80L, 2391C ,無[], 因為檔案格式的原因有時會導致我們的unix程式,或者shell程式出現錯誤,那麼需要把這些dos檔案格式轉換成unix格式,方法是:
vi dos.txt
:set fileformat=unix
:w
這樣檔案就轉換成unix格式檔案了, 一般在windows機器上編寫好了檔案傳到unix下就可能會出現這樣的情況.
用命令:set ff?
可以看到dos或unix的字樣.
用:set ff=unix把它強製為unix格式
也可以用sed 這樣的工具來做:
sed 's/^M//' filename > tmp_filename
其中^M是同時Ctrl+V+M按出來的,表示斷行符號。
一)若linux系統中檔案換行處出現^M
先用vi開啟檔案,看看是哪種檔案格式: :set ff, 然後將其與對應的檔案進行轉換,如是dos則轉換為unix;
二)若window系統檔案換行處出現?
先用ultraEdit開啟檔案,查看是哪種檔案格式,如果是unix,則調用菜單中相應選項,將unix轉換為dos,則顯示正常。
三)關於檔案格式
dos,unix格式處理的差別:DOS是斷行符號+換行,而在UNIX下,只有斷行符號,無換行!
用指令碼來判斷是哪種檔案格式:
file filname|grep -qv ^M && echo file is unix formart || echo file is dos formart
四)經驗總結:
凡是行尾出現類似^M,?的亂碼都是由檔案格式不對引起的,用cvs checkout下的檔案格式在Window系統下是dos格式,在unix系統下是unix格式,(CVS預設會根據平台差異自動轉換檔格式)由此類推,在Mac系統應該是mac格式,因此用ftp遠程傳輸工具在幾種作業系統下要注意檔案格式的差異,要求用cvs來管理源碼時,不允許用ftp來傳輸源碼檔案,一來ftp不加密檔案,不安全;二來會造成檔案格式的混亂,導致換行錯誤,由此導致gdb調試中行號錯誤。