出力パイプはフィッシュでEOFを待ちます。

出力パイプはフィッシュでEOFを待ちます。

csearch出力を取得して色を指定したいです。次のようになります。

/home/bp/whatever.txt:1:foo

これは働きます:

csearch -n -- $term \
  | env GREP_COLORS='mt=02;35' grep --color=always -P '^[^:]+:[^:]+:' \
  | grep -P --color=always -- $term \
  | less -RFX

csearchただし、何も表示する前に出力全体が計算されるのを待ちます。

今これを行う:

csearch -n -- $term \
  | env GREP_COLORS='mt=02;35' grep --color=always -P '^[^:]+:[^:]+:' \
  | pv
  | grep -P --color=always -- $term \
  | less -RFX

...データが流れているのを見ることができますが、そうする場合:

csearch -n -- $term \
  | env GREP_COLORS='mt=02;35' grep --color=always -P '^[^:]+:[^:]+:' \
  | grep -P --color=always -- $term \
  | pv
  | less -RFX

...データフローはありません。 2番目はgrepEOFを待っているようです。

両方のgrepを追加しても--line-buffered私には役に立たないようです。

このコマンドパイプラインがEOFを待つのはなぜですか?

ベストアンサー1

を使用していますfish。つまり、実際にはを使用していませんが、次のようgrepになります。

function grep
    command grep --color=auto $argv
end

Fishコードブロックは出力を送信しません。

grep最初の項目ではすでにラップされていてenv関数を無視するため、問題はありません。

変更grepするには変更してください。/bin/grep

おすすめ記事