我有这样的程序。我在终端模式。我想将outptu内容复制到另一个文件。首先我尝试重定向,但由于缓冲它没有工作。然后我尝试了unbuffer命令。但它对下面的案例没有正常工作
文件
main()
{
int i;
printf("Starting\n");
scanf("%d",&i);
printf("The value is %d\n",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]。
答案 0 :(得分:2)
unbuffer
doesn't read from standard input,所以你的程序只是等待而不会得到任何输入。您可以使用-p
option:
unbuffer -p ./a.out | tee tt
会奏效。缺点是它不会显示你写的内容。
或者,如果您控制C程序,则可以在标准输出不是终端时禁用默认缓冲。您可以使用例如setbuf:
setbuf(stdout, NULL);
或在每次输出后手动刷新。