Запитання з тегом «process-substitution»

Підстановка процесу - це форма міжпроцесового зв'язку, яка дозволяє введенню або виведенню команди відображатись як файл (наприклад: `<(cmd)` або `> (cmd)`).

5
Процес заміщення і труби
Мені було цікаво, як зрозуміти наступне: Передача строки команди в stdin іншої - потужна техніка. Але що робити, якщо вам потрібно передати stdout з декількох команд? Тут відбувається заміна процесу. Іншими словами, чи може процес заміщення робити все, що може зробити труба? Що може зробити процес заміщення, але труба не …

2
Чому заміна процесу призводить до файлу під назвою / dev / fd / 63, який є трубкою?
Я намагаюся зрозуміти названі труби в контексті цього конкретного прикладу. Я набираю &lt;(ls -l)свій термінал і отримую вихід як bash: /dev/fd/63: Permission denied. Якщо я набираю cat &lt;(ls -l), я міг би бачити вміст каталогу. Якщо я замінити catз echo, я думаю , що я отримую ім'я терміналу (або це?). …

2
Чому функція `sort <(ls -l)` працює, але `sort <(ls -l)` не працює?
Сьогодні я дізнаюся щось про фіфо з цією статтею: Вступ до названих труб , в якій згадується cat &lt;(ls -l). Я зробив кілька експериментів, використовуючи sort &lt; (ls -l), що з'являється помилка: -bash: syntax error near unexpected token `('` Потім я виявив, що я неправильно додав пробіл у команді. Але …

1
Чому заміна процесу BASH не працює з деякими командами?
Інколи процес заміни не буде працювати, як очікувалося. Ось приклад: Вхід: gcc &lt;(echo 'int main(){return 0;}') Вихід: /dev/fd/63: file not recognized: Illegal seek collect2: error: ld returned 1 exit status Вхід: Але він працює, як очікувалося, при використанні з іншою командою: grep main &lt;(echo 'int main(){return 0;}') Вихід: int main(){return …

2
Який портативний (POSIX) спосіб досягти заміни процесу?
Деякі оболонки, як-от bash, підтримують Process Substitution, який є способом подання результату процесу у вигляді файлу, наприклад: $ diff &lt;(sort file1) &lt;(sort file2) Однак ця конструкція не є POSIX і, отже, не портативна. Як може обробляти підміна бути досягнутий в POSIX співдружню чином (тобто той , який працює в /bin/sh) …

4
bash: як поширювати помилки при заміні процесу?
Я хочу, щоб мої сценарії оболонки виходили з ладу щоразу, коли команда, виконана з ними, відмовляється. Як правило, я роблю це з: set -e set -o pipefail (зазвичай я set -uтакож додаю ) Вся справа в тому, що жоден з перерахованих вище не працює з заміщенням процесу. Цей код друкує …

1
У zsh різниця між cat <(cat) vs cat | кішка проти кота = (кішка)?
Я очікував cat &lt;(cat)і cat | catзробити те саме: копіювати рядки зі stdin у stdout. Моє розуміння полягало в тому, що обидва будуть виконувати a catв нижній оболонці, перенаправляти catstdout нижньої catоболонки на тимчасово названу трубу, а потім виконувати іншу в поточній оболонці, а її stdin буде перенаправлений на трубу. …

4
Як наслідувати процес заміни в тирі?
У bash, я можу використовувати Process Substitution і трактувати вихід процесу як би файл, збережений на диску: $ echo &lt;(ls) /dev/fd/63 $ ls -lAhF &lt;(ls) lr-x------ 1 root root 64 Sep 17 12:55 /dev/fd/63 -&gt; pipe:[1652825] на жаль, процес заміщення не підтримується в dash. Який був би найкращий спосіб наслідувати …

2
Вихід процесу заміни не в порядку
The echo one; echo two &gt; &gt;(cat); echo three; команда дає несподіваний вихід. Я читав це: Як реалізується заміна процесу в bash? та багато інших статей про заміну процесів в Інтернеті, але не розумію, чому так поводиться. Очікуваний вихід: one two three Реальний вихід: prompt$ echo one; echo two &gt; …

5
grep файли зі списку
Я намагаюся запустити grep проти списку кількох сотень файлів: $ head -n 3 &lt;(cat files.txt) admin.php ajax/accept.php ajax/add_note.php Однак, хоча я шукаю рядок, який, як я знаю, знайдений у файлах, наступне не шукає файли: $ grep -i 'foo' &lt;(cat files.txt) $ grep -i 'foo' admin.php The foo was found Мені …

3
Як поєднати підстановку процесу Баша з документом ТУТ?
У Bash версії 4.2.47 (1) -випустіть, коли я намагаюся катетувати відформатований текст, який надходить з DUE-символу ТУТ: cat &lt;(fmt --width=10 &lt;&lt;FOOBAR (I want the surrounding parentheses to be part of the HERE-document) (Even the preceding unbalanced parenthesis should be part of it. FOOBAR ) # I want this paranthesis to …

2
Bash: процес заміщення і stdin
Наступний рядок очевидний: echo "bla" | foo | bar Але чи роблять ті, що нижче? echo "bla" | bar &lt;(foo) echo "bla" | bar &lt; &lt;(foo) Хто з fooі barчитав "бла" зі stdin і чому? Я маю на увазі, що, звичайно, я можу просто зашифрувати це і перевірити, але я …

4
Як правильно зафіксувати вихідний код / ​​обробити помилки при використанні підстановки процесу?
У мене є сценарій, який аналізує імена файлів у масиві, використовуючи наступний метод, взятий із Q&amp;A на SO : unset ARGS ARGID="1" while IFS= read -r -d $'\0' FILE; do ARGS[ARGID++]="$FILE" done &lt; &lt;(find "$@" -type f -name '*.txt' -print0) Це чудово працює і прекрасно обробляє всі типи варіацій імен …

3
Як використовувати трійник для перенаправлення на grep
Я не маю великого досвіду використання трійника, тому сподіваюся, що це не дуже просто. Переглянувши одну з відповідей на це питання, я зіткнувся з дивним поведінкою tee. Для того, щоб я вивів перший рядок і знайдений рядок, я можу використовувати це: ps aux | tee &gt;(head -n1) | grep syslog …


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