我想创建一个特殊的文件描述符以与 /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
这样调用可以让 customout 保持沉默
./demo.sh 3>/dev/null
应仅输出标准输入数据(加上任何标准错误)
hello from stdout
并像这样调用以沉默标准输入
./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
附注也许“客户”是这个概念的更好名称。
存在这个问题,但它并不完全是我想要实现的目标:
程序继承其父程序的 fd。如果你编写一个打开 4 个 fd 的 shell 并使用 fork/execve 启动一个程序,那么它将继承 4 个 fd。另请参阅 execve() 和共享文件描述符