Как передать дескриптор файла из копрока в другой процесс? - PullRequest
0 голосов
/ 15 марта 2019

Я прочитал документы bash по перенаправлению ввода / вывода. Я использую GNU Bash 5.0.2 на MacOS. Моя ментальная модель того, как работают файловые дескрипторы, явно чего-то не хватает, но я не могу понять, что именно.

Сценарий: у меня есть двоичный файл (с именем "./hello"), который выводит строку текста в фиксированном файловом дескрипторе.

int main() {
   write(25, "Hello\n",6);
   return 0;
}

Я не хочу редактировать эту программу. Я хочу, чтобы она начиналась с уже открытого fd 25.

Чтобы сделать это, я запустил другую программу, которая читает из стандартного ввода и выполняет некоторую обработку.

coproc ./processor
[1] 38642

Чтобы объединить эти две вещи, я попытался:

# This does not work, but I wish it would.
./hello 25>&${COPROC[1]}

Когда я делаю это, процессор не получает никакого ввода. Тем не менее, следующие работы:

 # This works.
 date >&${COPROC[1]}

Также работает следующее:

 # This works.
 ./hello 25>test.txt
 cat test.txt
 Hello

Насколько я понимаю, fd сохраняются при использовании fork (), поэтому fd 25 должен быть открыт в дочернем процессе?

...