錯誤描述:
在/etc/profile檔案結尾設定了Java的環境變數儲存後執行“source /etc/profile”或重登入後報如下錯誤:
使用“env”命令查看系統內容變數發現沒有設定成功。
原因分析:
因為使用了FlashFXP軟體在Windows系統下開啟修改的/etc/profile檔案導致檔案的系統格式發生變化。Dos和Windows採用斷行符號+換行CR/LF表示下一行,而UNIX/Linux採用分行符號LF表示下一行,蘋果機(MAC OS系統)則採用斷行符號符CR表示下一行。CR用符號“\r”表示, 十進位ASCII代碼是13, 十六進位代碼為0x0D;LF使用“\n”符號表示, ASCII代碼是10, 十六製為0x0A。所以Windows平台上換行在文字檔中是使用 0d 0a 兩個位元組表示, 而UNIX和蘋果平台上換行則是使用0a或0d一個位元組表示。一般作業系統上的運行庫會自動決定文字檔的換行格式。如一個程式在Windows上運行就產生CR/LF換行格式的文字檔,而在Linux上運行就產生LF格式換行的文字檔。在一個平台上使用另一種分行符號的檔案檔案可能會帶來意想不到的問題, 特別是在編輯程式碼時。有時候代碼在編輯器中顯示正常, 但在編輯時卻會因為分行符號問題而出錯。上述錯誤就是因為使用了Windows系統下的記事本開啟修改profile檔案導致分行符號被轉換成了CR/LF,而在Linux系統下執行時就會因為識別不出斷行符號符CR而報unexpected token錯誤。
解決方案:
我們可以使用Notepad++這個文字編輯器來進行不同作業系統文本格式的轉換。使用Notepad++開啟profile檔案後在功能表列中選擇“編輯”->“檔案格式轉換”->“轉換為UNIX格式”儲存後則會將Windows的分行符號CR/LF轉換為Linux的LF,此時再在Linux系統下執行“source /etc/profile”便不會再報上述的錯誤,環境變數也將設定成功。