首先请参考如何将 stdout 和 stderr 重定向到文件并将 stderr 显示到控制台
这个解决方案对我来说创造了奇迹。当命令传递给 bash -c 时,我调用了脚本和命令。我什至编写了一个全局宏/函数以使其易于使用(并避免重定向中的任何拼写错误或换位)。我很高兴地使用了它很多很多次。
然后我把魔法包裹起来
nice make -k -j 1 configure-host
开始由 autotools 准备的构建/安装。 没有收集到 make 输出。 事实上,3 个 make 作业(配置主机、全部、安装)中的每一个都只将 2 个字符放入我的日志文件中。
每个输出文件由 2 个字符组成:一个 ASCII 零和一个回车符 (0x300a)。应该有make生成的行和行。
我一直在困惑我的头,但不明白发生了什么。三个相关点:
- 我正在运行 MSYS2 / MinGW-W64(32 位 XP)。
- 制作调用使用至少 6 个 FD 执行大量重定向的 autotools 脚本。
- 这../配置自动工具的一部分效果很好。
当我回到简单的重定向时
nice make -k -j 1 configure-host &>logfile
我在日志文件中收集了大量标准输出和标准错误(使用安静的终端)。
这是我的宏:
CAPTURELOG () {
log=$1; shift; rm -f ${LOGS}/${log}.log;
bash -c "$@" 2>&1 >>$LOGS/${log}.log | tee --append $LOGS/${log}.log; }
这是它的调用:
export LOGS=/g/GNU-GCC/toolchain-avr/logs/D20161122.T023341
export MAKE_JOBS=1
...
CAPTURELOG build_gcc.configure-host nice make -k -j $MAKE_JOBS configure-host
这是它的执行:
+ CAPTURELOG build_gcc.make.configure-host nice make -k -j 1 configure-host
+ log=build_gcc.make.configure-host
+ shift
+ rm -f /g/GNU-GCC/toolchain-avr/logs/D20161122.T023341/build_gcc.make.configure-host.log
+ bash -c nice make -k -j 1 configure-host
+ tee --append /g/GNU-GCC/toolchain-avr/logs/D20161122.T023341/build_gcc.make.configure-host.log