2012-01-12 104 views
2

我看到很多關於如何刪除它們的問題,但是我還沒有找到答案,爲什麼它們在Unix系統和終端中「搞砸」了我所有的測試/打印功能。Unix中打印回車的默認行爲是什麼?

因此,在程序員的意義上,爲什麼回車弄亂Unix shell。

編輯:是的,我可以。我不是故意咆哮,但我想知道是什麼原因導致回車打印很有趣。

一個示例是從系統獲取消息,該消息以\r\n結束所有消息。然後我必須在C中使用message[length - 2] = '\0';或者在perl中使用$str =~ s/\r//g

編輯2:在Unix系統中打印回車的默認行爲是什麼?它似乎會導致問題,通常需要刪除。

+0

你能提供一個具體的例子來說明你用來修復它的代碼嗎?並問一個關於該代碼的問題?這似乎更像是一個咆哮而不是一個問題。 – David 2012-01-12 18:32:49

回答

3

因爲它們在Unix系統上是不必要的和不受歡迎的。

你也應該看看你的stty設置。有處理輸入和輸出NL/CR映射的選項。在Linux中,stty -a說:

speed 9600 baud; rows 65; columns 120; line = 0; 
intr = ^C; quit = ^\; erase = ^?; kill = ^X; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; 
stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; 
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr 
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8 
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke 

注意-ocrnlonlcr-onocr-onlret-inlcr-igncr-icrnl尤其如此。

小心他們的混亂。你可以與他們進行試驗,如果你保留當前的理智終端設置:

saved_tty_settings=$(stty -g) 

...tinker with the settings here... 

stty $saved_tty_settings 

一個問題可能是因爲你解決的事情,這樣的回報不再發送到終端。在這種情況下,請嘗試輸入Control-Jstty $saved_tty_settingsControl-J。第一個控件-J刷新之前的任何命令(或者什麼都不做);其餘的則運行stty重置操作。我仍然有一個名爲sane的腳本,它具有我首選的tty設置的記錄,如果必須的話,我可以使用它。在過去的十年中,我並沒有經常使用它,但我還沒有擺弄tty設置。

請務必謹慎使用危險命令(rm等),甚至使用引號可能會導致問題(如果看不到您輸入的內容,並且您失去了跟蹤並且禁用了行編輯等, )。所以,你可以玩;只是要小心。

+0

這非常有趣,謝謝。 – Nate 2012-01-12 19:41:18

2

這是因爲不同的系統解釋不同的字符組合來表示行結束。 Windows使用\r\n,* unix使用\n,Mac使用\r。現在,當您在Unx中獲得Windows創建的文本文件時,您會在\n之前獲得額外的\r,並且需要將其刪除。

有一個很好的工具dos2unix可以爲你處理這種格式轉換。