'more' を使用して標準出力をページングし、syslog にパイプする

'more' を使用して標準出力をページングし、syslog にパイプする

私は、このラッパー スクリプトを介して実行されるすべてのコマンドが実行時間、コマンドを実行したユーザー、終了コードなどの情報を (rsyslog 経由で) ログに記録するようにするラッパー スクリプトを実装しました。

ページングを実装しようとしているのですが、「more」コマンドで問題が発生しました。問題の根本は、「more」が別のプログラムにパイプされると終了してしまうことです。例:

echo -e "this\nis\na\ntest" | more -3 | cat

これは 4 行を出力しますが、最後に '| cat' を削除すると、予想どおり 3 行を出力した後に一時停止します。

確かに、「more」の代わりに「less」を使用すると機能しますが、別の「ウィンドウ」が開き、完了するとスクロールバックができないため、望ましい効果が得られません (「less」のように後方にスクロールする機能も必要ありません)。

現在の解決策は、必要な効果を得るために「head」コマンドと「tail」コマンドを使用することですが、他にもいくつかの課題に直面することになります。

私が思い描いた通りに「more」を機能させる秘訣を知っている人はいませんか? よりシンプルな別のページング ツール (Enter、スペース、および「q」アクションをサポート) の提案も歓迎します。

ありがとう!

答え1

teeパイプラインの途中でページングするよりも、 を使用してファイルにリダイレクトし、stdout をページングする方が適切であると思われます。

printf "%s\n" this is a test | tee /tmp/some.file | more -3

関連情報