我看过这个问题,它也让我感到困惑。
终端会回显字符"^D",然后程序输出"0",覆盖了插入符号。
你可以通过将程序的打印格式更改为"\n%d\n"来演示这一点。
当被问及“为什么?”时,我进行了探索。答案在tty设置中。对于我的终端,
stty -a
的输出如下:
speed 9600 baud; 65 rows; 120 columns;
lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl
-echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
-extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel iutf8
-ignbrk brkint -inpck -ignpar -parmrk
oflags: opost onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
-dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
eol2 = <undef>; erase = ^?; intr = ^C; kill = ^X; lnext = ^V;
min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
stop = ^S; susp = ^Z; time = 0; werase = ^W;
注意第二行末尾的echoctl
- 它是用于“回显控制字符”的。
$ stty -echoctl
$ cat > /dev/null
asdsadasd
$ stty echoctl
$ cat > /dev/null
asasada^D
$
你看不到它,但对于每个cat
命令,我在asd
字符的行末打了一个Control-D,以及在按回车后的第二次。在第二个示例中,提示符删除了第二个回显的^D
。
因此,如果您不喜欢控制字符被回显,请将其关闭:
stty -echoctl
Shell也可能会阻碍操作。我尝试使用 Control-R,结果我的shell (bash
)陷入了困境。
(reverse-i-search)`': aasadasdadadasdadadadadadsad
我输入了不太原创的字符序列'asd',然后按下了Control-R键,在shell中就会出现以下内容。我打断了这个过程;我不确定反向搜索是什么,但我怀疑它与Emacs有关;这不是我预期的结果。
more
或less
进行操作会发生什么?如果将输入管道传递到程序中会怎样? - user1663900
旁边的D
只是来自上面的键组合。 - Nicolás Ozimica