перенаправлення виводу команди за допомогою '- <<(...)'


10

Мені потрібно було витягти шасум. Це працює, але хто може пояснити, чому?

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

Я знайомий з $( )конструкцією, але не можу знайти документи для <( ), в поєднанні з -<, який, я вважаю, перенаправляє на sedSTDIN.

Я знаю, що існують простіші способи, але ця конструкція мені ухиляється.

Відповіді:


10

The

<(openssl dgst -sha256 filename)

конструкт - це процес заміщення . Він створює файл (або FIFO) за лаштунками і передає його ім’я назад в послідовність команд.

< 

- це регулярне перенаправлення файлів, яке перенаправляє вміст закулісного файлу на stdinта

-

- це заповнювач заповнення, sedякий вказується тим, що він вказує, що його дані надходять stdin.

Оскільки sedвін цілком здатний читати з файлів, то -<в цьому контексті здається непотрібним;

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

має працювати так само добре.


3
або простоopenssl ... | sed '...'
Майлз

8

Конструкція <( COMMAND )Баша називається процес заміщення .

Він оцінює 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 і видаляє кожен символ перед символом "=", за яким пробіл.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.