0

我理解管道a < b > c意味着使用文件b的数据作为输入来编程a而不是stdin,并将程序b的输出写入文件c而不是stdout。

我不明白的是如何给出管道命令以使用文件 b 的数据作为输入来编程 a 而不是 stdin,并将程序 a 的输出写入文件 c 而不是 stdout。

b 会放在哪里?

我有一个 < b 用于标准输入,但没有找到获得标准输出的方法。

非常感谢!

4

3 回答 3

2

你应该做这个:

a < b > c

正如你在问题中提到的那样。这并没有按照您的意思做:它不使用 b 作为 a 的输入,也不使用 c 作为 b 的输出。这使用 b 作为 a 的输入和 c 作为 a 的输出。

于 2013-04-24T01:58:44.280 回答
1

这实际上不是管道,而是输入和输出流的重定向。

管道是获取一个进程的标准输出并将其附加到另一个进程的标准输入,例如:

seq 1 5 | sort -r

它生成数字 1 到 5(按该顺序),然​​后按相反顺序对它们进行排序,如下所示:

pax> seq 1 5
1
2
3
4
5

pax> seq 1 5 | sort -r
5
4
3
2
1

序列:

prog <infile >outfile

在进程中运行prog程序并从infile 文件中获取其标准输入并将其标准输出发送到outfile文件。只涉及一个过程。

要“使用文件 b 的数据作为输入来编程 a 而不是 stdin,并将程序 a 的输出写入文件 c 而不是 stdout”,您可以使用:

a <b >c

和你一样。<您会注意到,在我的示例中,重定向字符(或)和文件名之间没有空格>——我相信这会使关系更清晰,因为>xyzzy意味着“将输出发送到xyzzy文件”。

您关于做什么的错误断言a < b > c(“使用文件 b 的数据作为输入来编程 a 而不是标准输入,并将程序 b 的输出写入文件 c 而不是标准输出”)将更适合单独的命令:

a <b ; b >c

ab程序之间没有真正的联系。

于 2013-04-24T02:14:04.900 回答
1

你的理解是错误的。

一个命令如

a <b >c

只有一个命令,即a. 输入a来自 file b,输出来自 file c

没有正在执行的命令b(或c)。

简而言之,该命令已经完成了您想要的操作。

于 2013-04-24T02:01:28.550 回答