我正在尝试实现一个shell,除了多个管道外,我一切都运行得很好。
即ls -l -a -F | tr [a-z] [A-Z] | sort
我该如何处理?我知道我必须创建多个管道来解决这个问题,但究竟如何做呢?
有人可以指导我朝正确的方向发展吗?
我目前只管理一个管道,但是当我有两个以上的管道时,我不太清楚如何处理这个问题。 我想知道是否有人可以提供一些伪代码来解决这个问题
答案 0 :(得分:2)
按顺序解析字符串,当你到达管道符号时,你将最后一个命令分叉并将std存储在std中。如果您有先前的命令,则将该命令std输出到新命令的std。然后你循环。
附加说明:
之间的唯一区别
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的输入。
管道就像>
一样,但你用fork运行“目标”。
答案 1 :(得分:0)
如果你确实让一切工作但多个管道,你可以使用分组或子壳将它们减少到单个管道。
{ ls -l -a -F | tr a-z A-Z; } | sort
(ls -l -a -F | tr a-z A-Z) | sort