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.

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.


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.