shell - 将标准输入和标准输出重定向到文件

标签 shell redirect batch-file stdout stdin

我目前是C 简介类(class)的助教。该类(class)是使用 Visual Studio 进行教学的,但是在评分时,我只使用一个简单的 Windows 批处理脚本来处理所有提交的作业,编译它们,在测试文件上运行它们,并将输出重定向到我可以打印的一系列文本文件拿出来,做好标记,然后交还给学生。整个过程运行得很好,除了当我重定向标准输入时,它不会像直接在控制台中输入相同的标准输入时那样出现在重定向的标准输出中。因此,为控制台格式化的代码输出在重定向的输出中无法正确显示。以下文件片段显示了此问题。有谁知道一个简单的解决方案吗?

文件:example.c

#include <stdio.h>

int main()
{
    int v;
    printf("Enter a number: ");
    scanf("%i", &v);
    printf("You entered: %d\n", v);
    return 0;
}

文件:input.txt

42

输出(控制台)

C:\>example.exe
Enter a number: 42
You entered: 42

C:\>

输出(重定向)

C:\>example.exe < input.txt > output.txt

C:\>more output.txt
Enter a number: You entered: 42

C:\>

最佳答案

这是预期的(正确的)行为。输入永远不是标准输出的一部分。如果您执行 example.exe > output.txt 并盲目输入 42,您应该预料到 42 在输出中也只显示一次。

我能想到的唯一解决方案是终端/shell 记录整个 session 。 Windows 命令 shell 无法做到这一点。不过,您可以编写自己的终端代理,它将标准输入输入学生的程序并读取输出本身,同时以组合方式写出两者。在 POSIX 下 fork 执行另一个程序并重定向该程序的标准输入/输出(由 Cygwin 提供给您)非常容易,但我不知道普通的 DOS/Windows。

关于shell - 将标准输入和标准输出重定向到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/220814/

相关文章:

shell - 如何在 CSV 文件中添加新列

apache - 如何阻止用户通过url访问css文件和图像

php - 如何配置 nginx 将所有响应重定向到 .php 文件以在 404 上重定向?

Windows批处理脚本从文件名中删除括号中的文本?

batch-file - Windows CMD 批处理 : FOR/R with DelayedExpansion

bash - 在 bash 中处理命名参数

shell - 如何通过管道将输入和输出传送到交互式 shell?

if-statement - DOS 批处理文件中可以有 IF block 吗?

shell - zsh 和动态变量

javascript - 如何将 iPhone 重定向到 iTunes?