将 stderr 重定向到文件,将 stdout 重定向到控制台

Redirecting stderr to file and stdout to console

dcc  -tPPCE200Z4VEN:simple -Xdialect-ansi -XO -g3 -Xsize-opt -Xsmall-data=0 -Xno-common -Xnested-interrupts -Xdebug-dwarf2 -Xdebug-local-all -Xdebug-local-cie -Xdebug-struct-all -Xforce-declarations -ee1481 -Xmacro-undefined-warn -Xlink-time-lint -W:as:,-l -Wa,-Xisa-vle -Xsmall-const=0 -Xforce-prototypes -Xpass-source -Xkeep-assembly-file -c -Xlint -Xenum-is-best -Xinline=0 -Xaddr-sconst=0x11 -Xaddr-sdata=0x11  -DDISABLE_MCAL_INTERMODULE_ASR_CHECK -DOSDIABPPC -DSC667349 -DFLASH_START -DV_SUPPRESS_EXTENDED_VERSION_CHECK -DV_USE_DUMMY_STATEMENT=STD_OFF -DEU_DISABLE_ANSILIB_CALLS -DMCAL_CER_VALIDATION -DOsAppMode=OSAPPMODEDEFAULT -DSKIP_MAGIC_NUMBER -DRTE_MICROSAR_PIM_EXPORT -DMEMIF_FAST_NVM_ACTIVATED=STD_ON -DESCLmgr_IsENABLED -DESCLmgr_CANrouting_RESvalidity=1 -DFEE_SWITCH_NOT_CONFIG_BLOCKS=STD_OFF -DFILL_NOINIT_WITH_ZERO -Dsrc -ID:\project\src -ID:\project\obj -E D:\project\src\hello.c 1> D:\project\obj\hello.i 2>&1

我正在预处理一个 .c 文件(编译器 wind river mpc ),然后 stdout 在 .i 文件中重定向,并从 .i 文件构造 .pp 文件。之后,我将 stderr 重定向到控制台 (2>&1)。检查上面命令行末尾的重定向。

我知道有很多关于这个主题的问题,但我进行了正确的重定向,但错误出现在 .pp 文件中:

# 4 D:\project\src\hello.c", line 5: error (dcc:1573): Only Debug builds are supported

这个错误真的是stdout的吗,不能拆分吗?

2>&1不是"redirect stderr to console",而是"redirect stderr to the same place as stdout currently goes"。如果您以其他顺序执行重定向 - 2>&1 1>hello.i 而不是 1>hello.i 2>&1 - 那么您将获得我相信您正在寻找的效果。

您需要考虑一次发生一个重定向。如果你说 1>hello.i 2>&1 那么会发生这种情况:

  • 首先,stdout 被重定向到 hello.i
  • 然后stderr被重定向到stdout的当前目的地,即hello.i.

但是如果你说 2>&1 1>hello.i 那么会发生这种情况:

  • 首先,stderr 被重定向到 stdout 的当前目的地,即控制台。
  • 然后 stdout 被重定向到 hello.i.