你好我有一个运行两个程序的脚本
#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;
}
我运行命令
./脚本<文件
文件在哪里
123
456
输出是
prog1 running
133
prog1 ended
prog2 running
10
prog2 ended
似乎 prog2 没有从文件中获取输入,到底发生了什么?
是否有可能 prog2 使用“\n”而不是数字?
最佳答案
你的脚本应该是这样的:
#!/bin/bash
exec 3<&1
tee >(./prog2 >&3) | ./prog1
这使用 tee
命令来复制标准输入和最近的 >()
bash 功能来打开一个临时文件描述符。 (使用 filedesriptor 3 是为了在没有并行的情况下拆分标准输出)。
参见 this answer阅读整个故事。
关于linux - 一个文件输入到脚本中的两个程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30754619/