一个文件输入到脚本中的两个程序

时间:2015-06-10 11:13:21

标签: linux bash file io-redirection

您好我有一个运行两个程序的脚本

#Script file 
./prog1
./prog2

prog1是一个C程序

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv){
  printf("prog1 running\n");
    int tmp;
    scanf("%d", &tmp);
    printf("%d\n", tmp+10);
    printf("prog1 ended\n");
    return 0;
}

prog 2也是一个C程序

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv){
    printf("prog2 running\n");
    int tmp;
    scanf("%d\n", &tmp);
    printf("%d\n", tmp+10);
    printf("prog2 ended\n");
    return 0;
}

我运行命令

./ script&lt;档案

文件是

123
456

输出

prog1 running
133
prog1 ended
prog2 running
10
prog2 ended

似乎prog2没有从文件中获取输入,引擎盖下发生了什么?

prog2是否可能花费了#34; \ n&#34;而不是数字?

1 个答案:

答案 0 :(得分:0)

你的脚本应该是这样的:

#!/bin/bash
exec 3<&1
tee  >(./prog2 >&3) | ./prog1

这使用tee命令复制stdin和最近的>() bash功能来打开临时文件描述符。 (使用filedesriptor 3来分割stdout而没有并行性。)

请参阅this answer阅读整个故事。