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

标签 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;
}

我运行命令

./脚本<文件

文件在哪里

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/

相关文章:

linux - 没有可用于基本错误的 Presto 元数据下载包 :

linux - 替换zsh中字符串的一部分

linux - 在 bash 脚本 (Linux) 中从 maven POM 读取属性

c# - 从字节数组打开文件

html - 如何正确构建我的 HTML 文件?

file - CRC32真的对文件完整性检查不好吗?

Linux:将文件上传到实时服务器 - 如何自动化流程?

c++ - 为什么我在安装软件包时收到这样的错误消息?

Bash 将双引号转换为单引号

windows - Windows CMD 中是否有与 bash 或 tcsh 中等效的源命令?