将多个语句一起管道只执行第一个命令

时间:2018-05-17 02:30:55

标签: c shell pipe

编辑问题的一半已修复,问题已经过编辑以反映修复问题。我仍然只看到它在一系列管道中执行第一个命令。

我在我的shell中最后一件事就是从头开始制作。我希望能够解析像"finger | tail -n +2 | cut -c1-8 | uniq | sort"这样的命令,我认为我很接近。我现在所拥有的,当该行作为字符串数组给出时,只执行“手指”部分。

以下是代码中不能正常工作的部分,我已经将其缩小到这个for循环和后面的部分:

mypipe[2];
//start out with stdin
oldinfd = 0;


   //run the beginning commands. connect in/out of pipes to eachother.
   for(int i = 0; i < max; i++){

      pipe(mypipe);

      processline(commands[i], oldinfd, mypipe[1]); //doesn't wait on children

      close(mypipe[1]);

      oldinfd = mypipe[0];

   }

   //run the final command, put output into stdout
   processline(commands[max], oldinfd, 1);  //waits on children

   ...

这个循环运行程序,应该看起来像这样:

stdin - &gt; [0]管道[写入] - &gt; [read] pipe [write] - &gt; ... - &gt; [read] pipe [1] - &gt;标准输出

我的过程线功能需要一行('finger')和exec。例如,processline("finger", 0, 1)运行finger命令没有缺陷。出于这个问题的目的,假设流程线工作正常,我遇到的麻烦是我如何使用管道以及它们的写入和读取结束。

对于印刷声明,我已确认正确的单词被发送到正确的部分。 (for循环接收“finger”,“tail -n +2”,“cut -c1-8”和“uniq”,而最后一行接收的命令[max]是“sort”)。

0 个答案:

没有答案