まず、シェルプログラミングについて話しているので、これはプログラミングの質問です(したがって、スーパーユーザーなどには属していません)。これはほとんどゴルフの質問かもしれませんが、そもそも答えがないので、助けていただければ幸いです:-)
つまり、ストーリーは次のとおりです。非常に快適であるためless、オプションを使用してパイプを使用するのが好きです。不要なときに邪魔になりません。それともそうですか?プロンプトがすでにターミナルウィンドウの下部にある場合、このオプションは私が望むことを正確に実行します(つまり、のように動作します)。しかし、現在のプロンプトがウィンドウの上部にある場合、最初に画面をクリアするために多くの空白行を印刷し、次に画面の下部に(短い)ファイルを印刷します。そうすると、テキストが少ないことがわかります。 1つの画面よりも大きいので、終了してプロンプトが返されます。--quit-if-one-screenlesslesscatless
しかし、これらの役に立たない空白行があるため、この動作はあまり良くありません。さまざまなオプションを試したり、スクリプトやエイリアスを作成したりしましたが、考えられる最善の方法は次のとおりです(zshを使用しているため、シェルはすでにパイプなどを複製できます)。
function catless() {
cat \
>>( bucket -$LINES | cat ) \
>>( bucket +$LINES | less )
}
bucket私が今書いた別のスクリプトはどこにありますか。それは、N行未満(-Nの場合)またはNより大きい場合(+ Nの場合)にstdinをstdoutにコピーします。ここに投稿しました:http ://snipt.net/Gyom/copy-stdin-to-stdout-or-not-depending-on-length
そしてls | catlessほとんど-動作します。ただし、同期上の理由から、ここに含まれるさまざまなプロセスは端末に正しくアクセスできず、すべてがバックグラウンドで実行されます(特に、lessここで正しいものを取得することはなく、プロンプトがすぐに返されます)。しかし、たぶん私は間違った道をたどりました。
要約すると、私が欲しいのは、入力できる関数/スクリプト/何でも、の出力が1画面より短い場合と、長い場合とまったく同じようにls | catless動作することです。ls | catlsls | less
何か案は ?