解決mac os下mcss命令報錯:env: node\r: No such file or directory


標題無“轉載”即原創文章,版權所有。轉載請注明來源:http://besteam.im/blogs/article/31/。

我一直對字符界面有抵觸感,即使會用vim,我的linux腳本(python/bash script)一般都是在windows下寫完調試好,然后傳到linux上的。

不過寫好的linux腳本傳到linux上運行的時候卻經常報這樣的錯:

$ cat fish.py #!/usr/bin/env python print "fish" $ chmod u+x fish.py $ ./fish.py : No such file or directory

找不到文件?可是無論怎么修改腳本,都沒辦法解決。找不到文件,那應該是第一行的env命令有問題啰?真是讓人讓人摸不着腦袋,其實這是因為換行符的問題。

我們知道,linux下的文本文件以ascii碼為10的字符表示換行。而windows下則使用連續的13和10兩個字符。在python和c語言里使用\r代表ascii符為13的字符,叫做回車符,而\n代表ascii碼為10的字符,叫做換行符。對於:

#!/usr/bin/env python\r\n

這樣一行文本,windows下的程序會認為#!/usr/bin/env python就是一行。而linux呢,則會認為#! /usr/bin/env python\r是一行。於是,剛才的錯誤就出來了,因為根本沒有python\r這個文件嘛。

有個比較奇怪的地方,仔細想想,env如果出錯的話應該是報這樣的錯誤信息的:

/usr/bin/env: python : No such file or directory (python后面有一個回車符)

那為什么現在是:

: No such file or directory

這主要是因為\r這個字符的緣故。在linux終端下,輸出\r會什么都不顯示,只是把光標移到行首。看看我用python取得env輸出的出錯信息:

/usr/bin/env: python\r: No such file or directory

於是終端雖然輸出了/usr/bin/env: python,但是碰到\r后,光標會被移到行首,接着輸出了:No such file or directory把前面的覆蓋掉了。於是我們就看到那個莫名其妙的出錯信息了。

可能有人會怪windows怎么那么傻,一個\n不就可以了,為什么要用\r\n呢,給我們造成了多大的麻煩。其實這也不能怪windows。使用\r\n的歷史可以追溯到遙遠的19世紀。 那時候發明的打字機主要結構是一個實心圓筒+排列成菊花狀的字模。紙張被牢牢地固定在圓筒的表面上。當我們按下一個字母的時候,機械裝置引動字模"飛"向紙張,同時圓筒前的色帶升起,用力地印下去,於是紙張上面就出現一個字了。印完之后,機械裝置自動地讓圓筒向左移動一個字母格子,方便打印下一個字符。打完一行之后,左手邊上有一個搖桿,搖一下,圓筒就可以滾動一個行距,這是換行。不過,因為打字的時候圓筒總會不斷地向左移動,所以打字員還需要用力地把圓筒推回右邊,這就是傳說中的回車了。在計算機里常見的換行操作在打字機里需要換行+回車兩個操作。自然,計算機里不用這么麻煩,不過windows喜歡看起來更兼容一點。於是換行就成了\r\n了。

 

 

解決辦法:

 

Lookup up:

:set fileformat=unix 
:set fileformat=dos

This can be used on either platform to switch to the other encoding.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM