przekierowanie wyjścia komendy za pomocą „- <<(…)”

10

Musiałem wydobyć szasum. To działa, ale czy ktoś może wyjaśnić, dlaczego?

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

Znam ten $( )konstrukt, ale nie mogę znaleźć dokumentów <( ), w połączeniu z -<którymi, jak zakładam, przekierowuję na sedSTDIN.

Wiem, że są łatwiejsze sposoby, ale ten konstrukt mi umyka.

GlenH
źródło

Odpowiedzi:

10

The

<(openssl dgst -sha256 filename)

konstrukcja jest podstawieniem procesu . Tworzy plik (lub FIFO) za scenami i przekazuje swoją nazwę z powrotem do sekwencji poleceń.

< 

to zwykłe przekierowanie pliku, przekierowujące zawartość pliku zakulisowego do stdini

-

to symbol zastępczy rozpoznawany przez, sedaby wskazać, że pochodzi od niego stdin.

Ponieważ sedjest doskonale zdolny do odczytu z plików, -<wydaje się w tym kontekście niepotrzebny;

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

powinien równie dobrze działać.

steeldriver
źródło
3
lub po prostuopenssl ... | sed '...'
Miles
8

Konstrukcja <( COMMAND )Bash nazywa się podstawieniem procesu .

Ocenia COMMANDwnętrze i przekierowuje dane wyjściowe do FIFO, nazwanego potoku, /dev/fdktóremu przypisany jest wirtualny deskryptor pliku . Działa jak plik tymczasowy zawierający dane wyjściowe ocenianego polecenia.


Konstrukcja <Bash nazywa się przekierowaniem wejściowym .

Pobiera deskryptor pliku po prawej stronie i przekierowuje jego zawartość do STDIN (standardowe wejście) polecenia po lewej stronie.


Nie -jest to konstrukcja Bash, ale argument,sed który określa jej plik wejściowy. Specjalna wartość -oznacza odczyt ze STDIN (który jest również seddomyślny, więc można go pominąć).


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

Ta linia najpierw uruchamia openssl dgst -sha256 filenamei buforuje swoje dane wyjściowe w FIFO. Deskryptor pliku reprezentujący ten nazwany potok jest traktowany jako plik wejściowy, który zostaje przekierowany do STDIN w sed 's/^.*= //' -. To sedpolecenie czyta ze STDIN i usuwa każdy znak przed symbolem „=”, po którym następuje spacja.

Bajt Dowódca
źródło