【发布时间】:2015-05-08 16:21:18
【问题描述】:
考虑以下简单程序,并假设它位于名为Test.c 的文件中。
#include <stdio.h>
int main(){
fprintf(stdout, "Hello stdout\n");
fprintf(stderr, "Hello stderr\n");
}
假设我将这个程序编译成一个名为Test 的可执行文件并按如下方式运行它。
./Test > Out 2> Err
运行后,我将有两个文件Out 和Err,分别包含这两条消息。
这太棒了,因为我可以将两种不同类型的消息打印到控制台,然后使用 bash 重定向过滤其中一种或两种。但是,我只能使用两个文件描述符进行这种过滤这一事实似乎非常有限。
有没有办法打开第三个或第 n 个文件描述符,指向终端输出,所以我可以单独过滤它?
语法可能是这样的。
./Test > Out 2> Err 3> Err2
我推测bash 可能对此有一些基本支持,因为以下测试似乎暗示bash 会将& 之后的数字视为文件描述符。
$ ./Test >&2
Hello stdout
Hello stderr
$ ./Test >&3
bash: 3: Bad file descriptor
【问题讨论】:
-
你的“推测”是完全正确的。但除非程序知道如何处理打开的 fd 编号 x,否则这只是一个浪费的打开句柄。
标签: c linux bash shell command-line