我已经坚持了一段时间了,是否有可能将stdout重定向到两个不同的地方?我正在为练习编写自己的shell,它目前可以运行ps aux | wc -l
或ps aux | wc -l > output.file
等命令。但是,当我尝试运行ps aux > file.out | wc -l
时,第二个命令不会从第一个命令接收输入。
在最后一个示例中,第一个命令将在子进程中运行,该进程将输出到管道的一端。逻辑类似于以下内容:
close(stdout);
dup2(fd[1], STDOUT_FILENO);
//If a file output is also found
filewriter = open(...);
dup2(filewriter, STDOUT_FILENO);
//Execute the command
答案 0 :(得分:4)
普通的UNIX shell也不能使用该语法。 UNIX(以及其他一些操作系统)提供tee
[1]命令将输出发送到文件以及stdout
。
实施例:
ps aux | tee file.out | wc -l
答案 1 :(得分:2)
tee
命令在UNIX中执行此操作。要了解如何在直线C中执行此操作,为什么不查看tee's source code?