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.

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ć.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.