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

pyg*_*gri 6 terminal shell command-line tcsh macos

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

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

回声 0 0 0 0 0
回声 1 1 1 1 1
回声 2 2 2 2 2
回声 3 3 3 3 3
回声 4 4 4 4 4
回声 5 5 5 5 5
回声 6 6 6 6 6
回声 7 7 7 7 7
回声 8 8 8 8 8
回声 9 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|~> 回声 1 1 1 1 1
1 1 1 1 1
我自己@mymac|~> 回声 2 2 2 2 2
2 2 2 2 2
等等等等(好)
我自己@mymac|~> 回声 21 21 21 21 21
21 21 21 21 21
我自己@mymac|~> 回声 22 22 22 回声 22 22 22 回声 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 机器上尝试了同样的方法,但我没有遇到任何问题。所以我很确定这可以在某处进行调整。

Chr*_*sen 5

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

xnu-1504.9.17 对应于 10.6.5,但这些位至少自 10.4 以来没有改变。

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

并非所有基于 tty 的程序都有这个问题。GNU Emacs 21.2.1、Vim 7.3 和bash 4.1 似乎都能够“跟上”大粘贴(我尝试了 8201 字节;Vimbash很慢,但他们毫无问题地接受了整个粘贴)。