有时我们在终端运行一个命令,输出太大,我们忘了把"| less"放到最后.所以我想知道当zsh中的输出太大时可以分页输出吗?
我尝试使用python和less实现此功能:
#!/usr/bin/env python3
termHeight = 25
import sys
from subprocess import Popen, PIPE
p = Popen(['unbuffer'] + sys.argv[1:], stdin=PIPE, stdout=PIPE)
lines = []
for count in range(termHeight):
line = p.stdout.readline()
if not line:
break
print(line.decode('utf8'), end='')
lines += [line]
if line:
q = Popen(['less', '-Mr'], stdin=PIPE)
q.stdin.writelines(lines)
while True:
line = p.stdout.readline()
if not line:
break
q.stdin.write(line)
q.communicate()
Run Code Online (Sandbox Code Playgroud)
让我们将这个python脚本保存到p.py. 因此,当我们运行"python p.py some commands"之类的"python p.py ls --help"时,如果输出超过25行,则此脚本将使用less来显示输出.
问题是我无法从用户那里获得输入.这意味着此解决方案根本不适用于交互式程序.
尝试将此添加到您的 .zshrc
export LESS="-FX"
Run Code Online (Sandbox Code Playgroud)
-F ="如果整个文件可以显示在第一个屏幕上,则会导致自动退出."-X ="禁止将termcap初始化和取消初始化字符串发送到终端."(停止更少清除屏幕)对我来说less,当有不止一个文本屏幕时,这个方法被用作寻呼机,而当没有时,使用zsh的内置寻呼机(zsh -c '< /dev/fd/0'如cat).
HTH
| 归档时间: |
|
| 查看次数: |
1186 次 |
| 最近记录: |