MacOSX 10.6.7 在 1024 个字符处切断标准输入

MacOSX 10.6.7 在 1024 个字符处切断标准输入

我编写了一个小的 perl 脚本,其调用方式如下:

perl -pe'...' <a

我想从 Web 浏览器复制输入文件“a”的内容(确切地说是整个 wordpress 博客条目)。复制部分工作正常,完整内容显示在 ClipMenu 中。但是当我尝试使用 cat 和重定向将其粘贴到文件中时:

cat >a

它发出 1024 个字符,然后停止接受输入 - 只有 CTRL-C 可以提供帮助。我尝试过只粘贴 1023 个字节/字符,而且这样做有效,按下回车键后,我可以毫无问题地将其输入到文件中。但如果我在一行中输入 1024 个字符,那么除了 CTRL-C 之外没有其他办法。

我尝试过 iTerm 和 Terminal.app,它们都表现出完全相同的行为。我尝试过 macports 和 /bin 中的 bash,结果完全相同。我甚至尝试过 dd:

dd bs=1M of=a

结果完全一样。似乎没什么帮助。

我不知道 - 为什么会发生这种情况?我怎样才能轻松地将内容复制粘贴到 Mac OS X 上的文件中,并确保内容不会受到任何更改?

答案1

%pbpaste | perl -e'...'

您已达到 tty 的最大行长。如果您将 tty 切换为非行模式,它就可以正常工作。

但 pbpaste 确实正是您想要的。

答案2

我使用过的每个 unix 都对熟模式输入的长度有限制,尽管它可能因操作系统而异。这就是为什么当你执行 cat>a 时,你只能在一行中输入这么多内容。操作系统会缓冲来自 TTY 的输入,以便你可以在将其发送到应用程序(在本例中为 cat)之前进行编辑(例如,在文本上退格并进行更改)。操作系统为此分配了一个固定大小的缓冲区,而你正在达到它的极限。你最好的选择是使用交互式程序来写入文件。例如,你可以运行 vi 并输入

:set paste

命令关闭自动缩进。按“i”进入插入模式,粘贴代码,按 Esc,然后运行:

:w a
:q

保存文件并退出。

相关内容