粘贴到 tcsh 时的命令限制(mac OS X)

粘贴到 tcsh 时的命令限制(mac OS X)

当我将命令粘贴到运行 TC shell(/bin/tcsh)的终端应用程序(最高 OS X 10.5.8)时,遇到了 1024 个字符的限制问题。

通过将以下命令粘贴到终端应用程序中,可以一致地重现此情况:

回显 0 0 0 0 0
回声 1 1 1 1 1
回声 2 2 2 2
回声 3 3 3 3
回声 4 4 4 4 4
回显 5 5 5 5
回声 6 6 6 6 6
回声 7 7 7 7 7
回声 8 8 8 8 8
回声 9 9 9 9
回声 10 10 10 10 10
回声 11 11 11 11 11
回声 12 12 12 12 12
回声 13 13 13 13 13
回声 14 14 14 14 14
回声 15 15 15 15 15
回声 16 16 16 16 16
回声 17 17 17 17 17
回声 18 18 18 18 18
回声 19 19 19 19 19
回声 20 20 20 20 20
回声 21 21 21 21 21
回声 22 22 22 22 22
回声 23 23 23 23 23
回声 24 24 24 24 24
回声 25 25 25 25 25

起初,它按预期工作,但在某些时候它失败了:

我自己@mymac |〜> echo 1 1 1 1 1
1 1 1 1 1
我自己@mymac |〜> echo 2 2 2 2
2 2 2 2 2
等等 (好)
我自己@mymac |〜> echo 21 21 21 21 21
21 21 21 21 21
我自己@mymac |〜> echo 22 22 22 echo 22 22 22 echo 23 23
22 22 22 回声 22 22 22 回声 23 23
回声 24 24 24 24 24
回声 25 25 25 25 25
(糟糕 - 胡言乱语)

所以过了一段时间就变得混乱了。事实上,我每行有 44 个字符,外加一个换行符,问题发生在第 23 行的第 34 个字符处。这意味着,问题发生在 45*22+34=1024 个字符之后。这显然是某个地方设置的限制……有人知道如何扩展它以便可以接受更多字符和行吗?

我在装有 tcsh 的 Linux 机器上尝试了同样的操作,但没有遇到任何问题。所以我很确定这可以在某个地方进行调整。

答案1

您遇到的限制似乎是 tty 预输入缓冲区。它是“硬编码”在 Mac OS X 内核中的。

xnu-1504.9.17 对应于 10.6.5,但这些位至少从 10.4 开始就没有改变过。

如果你只想运行命令,而不关心输入和输出可能会以奇怪的方式交错,那么你可以暂时禁用tcsh粘贴之前使用 来禁用命令行编辑unset edit(使用 重新启用它set edit)。这会将 tty 切换到“规范模式”,其中输入基于行。这使 shell 更容易“跟上”传入的粘贴文本。

并非所有基于 tty 的程序都存在此问题。GNU Emacs21.2.1,Vim7.3,以及狂欢4.1 似乎都能够“跟上”大型粘贴(我试过 8201 字节;Vim狂欢很慢,但他们毫无问题地接受了整个粘贴)。

相关内容