単純なファイルではなく、プログラムから連続出力を収集するための単純な1行コードはありますか?
PHPUnit
たとえば、ここに含まれている行をスキップしたいと思います。明らかな理由から、次の点はこれを行いません。
phpunit tests/cases | grep -v --line-buffered "PHPUnit"
カスタム関数などを必要とせずに通常のオネライナで実行できますか?
答え1
phpunitコマンドの出力が(PHP、Bashシェルなどを介して)バッファリングされているように聞こえますgrep
。出力をバッファリング解除して応答性を高める方法はいくつかあります。
バッファリング解除
試してみることができますunbuffer
コマンドは次の一部ですexpect
。
$ unbuffer phpunit tests/cases | grep -v --line-buffered "PHPUnit"
標準バッファ
stdbuf
コマンドを使用してバッファリングを無効にすることができます。
$ stdbuf -i0 -o0 -e0 phpunit tests/cases | grep -v --line-buffered "PHPUnit"
スイッチの詳細:
-i, --input=MODE
adjust standard input stream buffering
-o, --output=MODE
adjust standard output stream buffering
-e, --error=MODE
adjust standard error stream buffering
したがって、上記はSTDIN、STDOUT、およびSTDERRのバッファリングをゼロに設定します。
grep
Grep自体がバッファリングされた出力の原因である可能性があります。一度に1行の出力のみをバッファリングするように指示できます。 (既に言及しているか発見しましたが、このQ&Aを見ている視聴者がそこにもバッファリングがあることを理解できるように言及します。)
$ phpunit tests/cases | grep -v --line-buffered "PHPUnit"