Я прочитал документы 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 должен быть открыт в дочернем процессе?