
Tengo un programa que se inicia con un script tcsh. Me gustaría comunicarme con ese proceso a través de tuberías (nocanalizaciones con nombre) creadas por un proceso padre. Sin embargo, parece que tcsh cierra todas las tuberías abiertas, excepto 0-2
cuando se inicia.
Ejemplo (puede ser un poco más largo de lo necesario, el problema es visible en cuanto B''
):
Para "claridad", identificaré los mensajes de bash con $
y los de tcsh con %
. Incremento la letra cuando el proceso es una bifurcación y agrego una '
para marcar una exec (3)
llamada.
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
El descriptor de archivo está cerrado, lo que significa que ya no puedo usarlo desde el proceso hijo. ¿Hay alguna forma de decirle a csh que persista (evite cerrar) los descriptores de archivos?