为什么“less”/“more”中的按键有时需要,当我使用管道时?

为什么“less”/“more”中的按键有时需要,当我使用管道时?

我喜欢使用管道将长文本输出输入到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,因此它不会影响任何其他命令。

相关内容