我看到很多关于如何删除它们的问题,但我还没有找到答案为什么它们“搞乱”Unix系统和终端中的所有测试/打印功能。
因此,从程序员的角度来看,为什么回车会破坏Unix shell。
编辑:是的,我可以。我不是故意咆哮,但我想知道是什么原因导致回车打印有趣。
示例是从系统获取消息,该消息以\r\n
结束所有消息。然后我必须在C中执行message[length - 2] = '\0';
或在perl中执行$str =~ s/\r//g
。
编辑2:在Unix系统中打印回车的默认行为是什么?它似乎会引起问题,通常需要删除。
答案 0 :(得分: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
特别注意-ocrnl
,onlcr
,-onocr
,-onlret
,-inlcr
,-igncr
,-icrnl
。
小心搞乱他们。如果您保留当前理智的终端设置,可以尝试使用它们:
saved_tty_settings=$(stty -g)
...tinker with the settings here...
stty $saved_tty_settings
一个问题可能是您修复了一些问题,以便返回不再发送到终端。在这种情况下,请尝试键入 Control-J stty $saved_tty_settings
Control-J 。第一个控件-J刷新之前的任何命令(或什么都不做);然后其余的运行stty
重置操作。我还有一个名为sane
的脚本,它记录了我喜欢的tty设置,如果必须的话我可以使用。在过去十年左右的时间里,我还没有经常使用它,但我也没有摆弄过tty设置。
对使用危险命令(rm
等)要非常谨慎,即使使用引号也会导致问题(如果你不能看到你输入的内容,你就会失去跟踪,而你和#39;已禁用行编辑等)。所以,你可以玩;小心点。
答案 1 :(得分:2)
这是因为不同的系统解释不同的字符组合来表示行尾。 Windows使用\r\n
,* unix使用\n
,Mac使用\r
。现在,当您在Unx中获得Windows创建的文本文件时,您需要在\r
之前获得额外的\n
,并且需要将其删除。
有一个很好的实用工具dos2unix可以为你处理这种格式转换。