大量のコマンド出力を表示するための一般的な「慣用語」は、経由でless
パイプすることですcommand | less
。しかし、この構文を使用することは可能ですがbash
(おそらくWindowsでのみ可能で、まだ他のシェルではテストされていません)、文句を言う傾向があります。それを見た後、どちらの場合もパイプで読んでいることがわかりました。唯一の違いは、最初の場合にリダイレクトされることです。 2番目のケースでは、ファイル名で取得します。読み取ると、通常のファイルチェックは何とか「無視」されますか?また、コンテンツがテキストであっても、これが通常のファイルではないかどうかを判断します。less <(command)
less
/dev/fd/63 is not a regular file
/proc/*/fd
stdin
/dev/fd/63
less
stdin
/dev/fd/63
答え1
less
通常、パイプやバイナリファイルなどの非正規ファイルを開くことを拒否します。演算子を使用して非正規ファイルを-f
強制的に開くことができます。less
less -f <(command)
別の方法はプロセスの交換:
less < <(command)
これにより、パイプが標準入力()<()
として機能するように生成されます。STDIN
less
答え2
less
/dev/fd/63
普通のファイルではないと文句を言うことが多い
少なくともGNUでは、この問題に対する解決策は次のオプションを使用することです-f
。
less -f <(command)
通常、less
非正規ファイルは開かれません(もちろんstdinは除く)。これはあなたを保護するためのものです。 -f
非正規ファイルを強制的に開きます。