ターミナルでコマンドを実行すると、出力が大きすぎて、最後に「| 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()
この python スクリプトを p.py に保存しましょう。したがって、「python p.py some commands」(「python p.py ls --help」など) を実行すると、出力が 25 行を超える場合、このスクリプトは出力を表示するために less を使用します。
問題は、ユーザーからの入力を取得できないことです。つまり、このソリューションは対話型プログラムではまったく機能しません。