tcsh закрывает файловые дескрипторы

tcsh закрывает файловые дескрипторы

У меня есть программа, которая запускается скриптом tcsh. Я хотел бы общаться с этим процессом через каналы (нетименованные каналы), созданные родительским процессом. Однако похоже, что tcsh закрывает все открытые каналы, за исключением 0-2запуска.

Пример (может быть немного длиннее, чем нужно, проблема становится заметна сразу B''):

Для «ясности» я буду обозначать приглашения bash как $, а приглашения tcsh как %. Я увеличиваю букву, когда процесс является форком, и добавляю , 'чтобы отметить exec (3)вызов.

A$ exec 42>42_output.txt # open fd 42
A$ ls /proc/$$/fd
0  1  2  255  3  42
A$ bash # launch bash as a child
B$ echo test >&42 #writes "test" to the file
B$ exec bash
B'$ echo test2 >&42 # also writes to the file
B'$ ls /proc/$$/fd
0  1  2  255  3  42
B'$ tcsh
B''% ls /proc/$$/fd
0  1  15  16  17  18  19  2
B''% bash
C$ ls /proc/$$/fd
0  1  2  255  3
C$ exit
B''% exec bash
B'''$ ls /proc/$$/fd
0  1  2  255  3
A$ exit
A$ ls /proc/$$/fd
0  1  2  255  3  42
A$ exec tcsh
A$ ls /proc/$$/fd
0  1  15  16  17  18  19  2  4

Файловый дескриптор закрыт, что означает, что я больше не могу его использовать из дочернего процесса. Есть ли способ заставить csh сохранять (избегать закрытия) файловые дескрипторы?

Связанный контент