我编写了一个小的 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
保存文件并退出。