以命令行模式将标准输出内容复制到文件中



我有一个这样的程序。我进入了终端模式。我想把输出内容复制到另一个文件中。首先,我尝试重定向,但它没有工作,由于缓冲。然后我尝试了unbuffer命令。但是对于像

这样的情况,它不能正常工作。文件

main()
{
        int i;
        printf("Startingn");
        scanf("%d",&i);
        printf("The value is %dn",i);
}

输出
# ./a.out 
Starting
4
The value is 4

使用unbuffer命令输出

# unbuffer ./a.out | tee tt
Starting
4

^C

简单重定向输出[工作,但输出顺序不正确]

# ./a.out | tee tt
5
Starting
The value is 5

我想在屏幕上显示的内容被直接复制到一个文件。我在终端模式下工作[没有GUI].

unbuffer在默认情况下根本不从标准输入中读取,因此您的程序只是等待而没有获得任何输入。您可以使用-p选项使其读取并传递标准输入:

unbuffer -p ./a.out | tee tt

。缺点是它不能在你写的时候显示你输入的内容。

或者,如果你控制C程序,你可以禁用标准输出的默认缓冲,当它不是一个终端。你可以使用,例如setbuf:

setbuf(stdout, NULL);

或在每个输出后手动刷新。

最新更新