在我的C程序中,运行在Linux上,它使用system()创建子进程,我注意到当我将标准输出重定向到管道或文件时,子进程的输出被发送到缓冲I/O函数(如printf() )的输出之前。当stdout被留给终端时,输出将按照预期的顺序进行。我将程序简化为以下示例:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("1. output from printf()\n");
system("echo '2. output from a command
我试图对运行交互式BASH脚本的用户隐藏所有的stderr,但将错误保存在日志文件中。然而,简单的stderr重定向却出人意料地隐藏了一些BASH输出,这些输出应该改为stdout。在两个系统上进行了尝试,得到了相同的结果(一个是GNU,版本4.1.2(1)-release (x86_64-redhat-linux-gnu),另一个是在MacOS X上)。
我一直怀疑这可能是因为exec取代了外壳.但是,另一个内置(times)可以正常工作,并输出到标准输出!
举个例子:
#!/bin/bash
exec 2>>file_log
echo This will be printe
我有一个脚本a.cmd,它调用另一个脚本b.cmd,并重定向它的输出。被调用的脚本启动一个从未终止的可执行文件。可执行文件的输出被重定向到自己的日志文件。简化代码:
a.cmd:
[1] @ECHO OFF
[2] SET LOG_FILE_NAME="log.txt"
[3] REM Start the b.cmd redirecting all output
[4] CALL b.cmd >> %LOG_FILE_NAME% 2>&1
[5] ECHO returned to a.cmd >> %LOG_FILE_NAME% 2>
当前在将小型windows批处理控制台的输出重定向到日志文件时遇到麻烦。我的Java应用程序需要启动Runtime.exec()调用,而不是等待它完成,并且仍然记录输出。下面是我的记录器类:
public class BatchThreadLogger extends Thread {
private Process process;
private String logFilePath;
private static final Logger logger = Logger.getLogger(BatchThreadLogger.class);
public BatchTh