tcsh 关闭文件描述符

tcsh 关闭文件描述符

我有一个使用 tcsh 脚本启动的程序。我想通过管道与该进程进行通信(不是父进程创建的管道(称为命名管道)除外。但是,tcsh 似乎会关闭除0-2启动时之外的所有打开的管道。

示例(可能比需要的稍长,问题很快就会显现出来B''):

为了“清晰起见”,我将用 来标识 bash 提示符$,用 来标识 tcsh 提示符%。当进程是 fork 时,我增加字母,并添加'来标记调用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 保留(避免关闭)文件描述符?

相关内容