Це називається процес заміщення.
<(list)
Синтаксис підтримується обома, bash
і zsh
. Він забезпечує спосіб передачі виводу команди ( list
) іншій команді, коли використання pipe ( |
) неможливо. Наприклад, коли команда просто не підтримує введення STDIN
або вам потрібен вихід декількох команд:
diff <(ls dirA) <(ls dirB)
<(list)
з'єднує вихідний list
файл з файлом у /dev/fd
, якщо його підтримує система, інакше використовується названа труба (FIFO) (що також залежить від підтримки системи; жодна інструкція не говорить про те, що станеться, якщо обидва механізми не підтримуються, імовірно, це припиняється з помилка). Потім ім'я файлу передається як аргумент у командному рядку.
zsh
додатково підтримує =(list)
як можливу заміну на <(list)
. З =(list)
тимчасовим файлом використовується замість файлу у /dev/fd
або FIFO. Він може бути використаний як заміна, <(list)
якщо програмі потрібно шукати висновок.
Відповідно до посібника ZSH, можуть бути й інші проблеми з тим, як <(list)
працює:
=
Форма корисна в якості як /dev/fd
і названі реалізації труби <(...)
мають свої недоліки. У першому випадку деякі програми можуть автоматично закрити відповідний дескриптор файлу перед вивченням файлу в командному рядку, особливо якщо це необхідно з міркувань безпеки, наприклад, коли програма працює із встановленням. У другому випадку, якщо програма насправді не відкриває файл, підпрограма, яка намагається прочитати або записати в трубку, (як правило, різні операційні системи можуть мати різну поведінку) блокується назавжди і повинна бути вбита явним чином . В обох випадках оболонка фактично постачає інформацію за допомогою труби, так що програми, які очікують, що з'явиться (див. Сторінку людини lseek(2)
) у файлі, не працюватимуть.
pfctl -f <(echo "pf rules")
скаже поганий дескриптор файлу. використовуючи натомість zsh та = (відлуння "правил pf"), замість цього працює.