'-<<(…)'を使用したコマンド出力リダイレクト


10

私はシャスムを抽出する必要がありました。これは機能しますが、なぜ誰かが説明できますか?

sed 's/^.*= //' -< <(openssl dgst -sha256 filename)

私は精通だ$( )構造が、のためのドキュメントを見つけることができない<( )と相まって、-<私はにリダイレクトされていると、sedSTDINを。

もっと簡単な方法があることは知っていますが、この構造は私にはわかりません。

回答:


10

<(openssl dgst -sha256 filename)

コンストラクトはプロセス置換です。背後でファイル(またはFIFO)を作成し、その名前をコマンドシーケンスに返します。

< 

ある通常のファイルのリダイレクトに舞台裏ファイルの内容をリダイレクトstdinし、

-

sed入力がからのものであることを示すためにによって認識されるプレースホルダーstdinです。

以来sed、ファイルからの読み込みが完全に可能であり、-<この文脈では、不必要なようです。

sed 's/^.*= //' <(openssl dgst -sha256 filename)

同様に動作するはずです。


3
または単にopenssl ... | sed '...'
マイル

8

<( COMMAND )Bashの構築物は、呼び出されたプロセス置換

COMMAND内部を評価し、その出力をFIFOにリダイレクトします。これは、/dev/fd割り当てられた内部の仮想ファイル記述子を取得する名前付きパイプです。評価されたコマンドの出力を含む一時ファイルのように機能します。


<Bashの構築物は、呼び出された入力のリダイレクト

右側のファイル記述子を受け取り、その内容を左側のコマンドのSTDIN(標準入力)にリダイレクトします。


-Bashの構成物ではなく、の引数sedそれは、その入力ファイルを指定します。特別な値-、STDINから読み取ることを意味します(これもsedのデフォルトなので、省略できます)。


sed 's/^.*= //' - < <(openssl dgst -sha256 filename)

このラインは最初に実行されopenssl dgst -sha256 filename、その出力をFIFOにキャッシュします。この名前付きパイプを表すファイル記述子は、STDINにリダイレクトされる入力ファイルとして扱われますsed 's/^.*= //' -。このsedコマンドは、STDINから読み取り、「=」記号とそれに続くスペースの前のすべての文字を削除します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.