“如何将 stdout 和 stderr 重定向到文件并将 stderr 显示到控制台”失败的解决方案

“如何将 stdout 和 stderr 重定向到文件并将 stderr 显示到控制台”失败的解决方案

首先请参考如何将 stdout 和 stderr 重定向到文件并将 stderr 显示到控制台

这个解决方案对我来说创造了奇迹。当命令传递给 bash -c 时,我调用了脚本和命令。我什至编写了一个全局宏/函数以使其易于使用(并避免重定向中的任何拼写错误或换位)。我很高兴地使用了它很多很多次。

然后我把魔法包裹起来

nice make -k -j 1 configure-host 

开始由 autotools 准备的构建/安装。 没有收集到 make 输出。 事实上,3 个 make 作业(配置主机、全部、安装)中的每一个都只将 2 个字符放入我的日志文件中。

每个输出文件由 2 个字符组成:一个 ASCII 零和一个回车符 (0x300a)。应该有make生成的行和行。

我一直在困惑我的头,但不明白发生了什么。三个相关点:

  1. 我正在运行 MSYS2 / MinGW-W64(32 位 XP)。
  2. 制作调用使用至少 6 个 FD 执行大量重定向的 autotools 脚本。
  3. ../配置自动工具的一部分效果很好。

当我回到简单的重定向时

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

相关内容