我喜欢使用管道将长文本输出输入到less
(或more
) 中,以使其更具可读性。只有在 Ubuntu 上,我才观察到一种不常见的行为:有时 less 中的按键不会立即处理。就好像我必须用 来“确认”它们<ENTER>
。例如,less 打开,显示文本,我点击<SPACE>
(什么都没有发生),我点击<ENTER>
(页面现在向下滚动)。这非常烦人,因为它使 less 几乎无法使用,因为 还会弄乱终端输出。
并非所有管道命令都会发生这种情况。一个例子是:
php --rc PDO | less
我从未在任何其他 Linux 发行版上看到过这种情况。
答案1
我整个下午都在努力解决这个问题,在找到这个问题并阅读了几个手册页后,我灵光一闪。事实证明,将 STDIN 重定向到 是/dev/null
一种解决方法,并将“正常”功能返回到less
:
php --rc PDO < /dev/null | less
或者
cat /dev/null | php --rc PDO | less
当然,这是一个糟糕的临时解决办法,我对 Bash 中的管道和流重定向的了解还远远不够,无法真正理解导致问题的原因或为什么可以修复它,但我认为发布这篇文章比完全不回答这个问题要好。希望比我更有知识的人能够阐明这一点 - 最好能提供更现实的解决方案。
我唯一的猜测是php
接收的是 STDIN 而不是less
在您输入命令时less
,但我很困惑为什么这种行为只出现在 Ubuntu 中(我已经确认php --rc PDO | less
在 Sabayon、CentOS 和 Debian 中运行良好,但在几个不同的 Ubuntu 安装中却崩溃了,包括那些更新到 11.10 的安装)。
更新以包含我找到的一些相关搜索结果。事实证明这是 Ubuntu 版本的问题php-cli
,因此它不会影响任何其他命令。