perintah pengalihan output menggunakan '- <<(...)'

10

Saya perlu mengekstrak shasum. Ini berfungsi, tetapi adakah yang bisa menjelaskan mengapa?

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

Saya kenal dengan $( )konstruk, tetapi tidak dapat menemukan dokumen untuk <( ), ditambah dengan -<, yang saya asumsikan mengarahkan ke sedSTDIN.

Saya tahu ada cara yang lebih mudah, tetapi konstruk ini menghindari saya.

Sayang
sumber

Jawaban:

10

Itu

<(openssl dgst -sha256 filename)

konstruk adalah proses substitusi . Itu membuat file (atau FIFO) di belakang layar dan meneruskan namanya kembali ke urutan perintah.

< 

adalah pengalihan file biasa, mengarahkan konten file di belakang layar ke stdindan

-

adalah placeholder yang diakui oleh seduntuk menunjukkan bahwa inputnya berasal stdin.

Karena sedsangat mampu membaca dari file, -<tampaknya tidak perlu dalam konteks ini;

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

harus bekerja dengan baik.

Steeldriver
sumber
3
atau hanyaopenssl ... | sed '...'
Miles
8

The <( COMMAND )Bash membangun disebut proses substitusi .

Ini mengevaluasi bagian COMMANDdalam dan mengalihkan outputnya ke FIFO, sebuah pipa bernama yang mendapatkan deskriptor file virtual di dalam /dev/fdditugaskan. Kerjanya seperti file sementara yang berisi output dari perintah yang dievaluasi.


The <Bash membangun disebut redirection masukan .

Dibutuhkan deskriptor file di sisi kanan dan mengarahkan kontennya ke STDIN (input standar) dari perintah di sisi kiri.


Ini -bukan konstruk Bash tetapi argumen untuksed itu menentukan file inputnya. Nilai khusus -berarti membaca dari STDIN (yang juga merupakan sedstandar, sehingga dapat dihilangkan).


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

Baris ini pertama kali berjalan openssl dgst -sha256 filenamedan menyimpan outputnya dalam FIFO. Deskriptor file yang mewakili pipa bernama ini diperlakukan sebagai file input yang akan dialihkan ke STDIN dari sed 's/^.*= //' -. sedPerintah ini membaca dari STDIN dan menghapus setiap karakter sebelum simbol "=" diikuti oleh spasi.

Komandan Byte
sumber