我可以cat
通过执行以下操作将其用作非常简单的文本编辑器cat > foo.txt
:
如果我然后输入:
bar
baz
然后按ctrl+ D,现在看起来像这样:
$ cat > foo.txt
bar
baz^D
将光标置于^
.如果我再按一次,文件就会被保存。但是,如果我按其他任何内容(好吧,也许不是任何内容,但大部分是任何内容),我只是继续编辑文件。
这是正常行为吗?
答案1
是的。它与确实有关^D
:它只是停止当前的read(2)
呼叫。
如果程序这样做int rdbytes = read(fd, buffer, sizeof buffer);
并且您按下^D
中间键,read()
则返回缓冲区中当前读取的字节,并返回它们的数量。线路终止时也会发生同样的情况;最后\n
的总是被传递。
因此,只有^D
在一行开头或另一行之后才^D
具有read()
return 0
、表示 EOF 的预期效果。
答案2
是的,这是正常行为。单个 Control-D 通常仅在位于行的开头时才会中断。按一下 Control-D 即可退出:
$ cat > foo.txt
bar
baz
^D