如何在Linux上创建除了stdout/stderr之外的自定义文件描述符?

jgwigjjp  于 2023-10-16  发布在  Linux
关注(0)|答案(1)|浏览(89)

我想创建一个特殊的文件描述符,与沿着/dev/std{in,out,err}共存。例如,假设创建了/dev/fd/3和/dev/customout,所有程序和脚本都可以使用它,就像它们使用stderr一样。
特别是,如果我有以下脚本 demo.sh

#!/usr/bin/env bash

echo hello from fd 3 aka customout >& /dev/customout

echo hello from stdout

像这样打电话是为了让顾客安静下来
./demo.sh 3>/dev/null
应该只输出stdin数据(加上任何stderr)
hello from stdout
像这样打电话让stdin静音
./demo.sh 1>/dev/null
应该只输出自定义数据(加上任何标准错误)
hello from fd 3 aka customout
但是不重定向的调用应该显示所有内容:
./demo.sh
应输出stdout、stderr、customout

hello from fd 3 aka customout
hello from stdout

p.s.也许customerr是一个更好的名称的概念。
这是一个存在的问题,但它并不完全是我试图实现的:
How to create a customized file descriptor on linux

3npbholx

3npbholx1#

程序继承其父程序的fd。如果你写了一个打开4个fds的shell,并使用fork/execve启动一个程序,那么它将继承4个fds。参见execve() and sharing file descriptors

相关问题