0

我正在尝试实现一个外壳,除了多个管道外,我的一切工作都很好。即ls -l -a -F | tr [a-z] [A-Z] | sort我该如何处理这个?我知道我必须创建多个管道来解决这个问题,但究竟该怎么做呢?有人可以指导我正确的方向吗?

我目前只管理一个管道,但是当我有两个以上的管道时,我不太确定如何处理这个问题。我想知道是否有人可以为我提供一些伪代码n如何解决这个问题

4

2 回答 2

2

只需按顺序解析字符串,当您到达管道符号时,您会分叉最后一个命令并存储 std in 和 std out。如果您有一个先前的命令,您可以将该命令标准输出到新命令的标准输入。然后你循环。


附加说明:

之间的唯一区别

A)    thing1 > thing2

B)    thing1 | thing2

这是吗,在 A 中,您正在运行 thing1(使用 fork)并将输出设置为名为 thing2 的文件

在 B) 中,您使用 fork 同时运行 thing1 和 thing2,并将 thing1 的输出设置为 thing2 的输入。

所以,

C)     thing1 | thing2 | thing3

是一样的,你需要运行(fork)thing1,thing2,thing3并将thing1的输出设置为thing2的输入,将thing2的输出设置为thing3的输入。

Pipe 的工作方式与此类似>,但您使用 fork 运行“目标”。

于 2013-11-13T18:48:01.103 回答
0

如果除了多个管道之外您确实让所有东西都正常工作,您可以使用分组或子外壳将它们减少为单个管道。

{ ls -l -a -F | tr a-z A-Z; } | sort
(ls -l -a -F | tr a-z A-Z) | sort
于 2013-11-14T07:45:55.520 回答