2017-01-11 2 views
0
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 

Я Preprocessing в .c файл (составитель речной ветер MPC), то стандартный вывод перенаправляется в файл .i и из .i файла, файл .pp является construcred. После этого я перенаправляю stderr на консоль (2>&1). Проверьте перенаправление в конце командной строки выше.Перенаправление STDERR в файл и стандартный вывод на консоль

Я знаю, что есть много вопросов на эту тему, но я делаю правильный redirectioning, но ошибка появляется в файле .pp:

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

эта ошибка на самом деле из стандартного вывода , разве это не может быть разделено?

ответ

3

2>&1 не означает «перенаправить stderr в консоль», это означает «перенаправить stderr на то же место, что и в настоящее время stdout». Если вы делаете перенаправления в другом порядке - 2>&1 1>hello.i вместо 1>hello.i 2>&1 - тогда вы получите эффект, который, я считаю, вы ищете.

Вам нужно подумать о перенаправлениях, происходящих по одному за раз. Если вы говорите 1>hello.i 2>&1 то это происходит:

  • Во-первых, стандартный вывод перенаправляется hello.i.
  • Затем stderr перенаправляется на текущий пункт назначения stdout, а именно hello.i.

Но если вы говорите 2>&1 1>hello.i то это происходит:

  • Во-первых, STDERR перенаправляется текущего назначения на стандартный вывод, а именно консоли.
  • Затем stdout перенаправляется на hello.i.
+0

Теперь это имеет смысл! Спасибо за подробное объяснение и за явное сравнение между моей проблемой и реальным решением! –

+0

Даже с этим решением он не сделает перенаправление, я полагаю, что stdout и stderr оба уплотняются в stdout ... –

+0

Это странно. Он работает для меня как в оболочке Unix, где возник синтаксис, так и в командной строке Windows, который, кажется, используется вами. (Если у вас установлен Python и на вашем пути, вы можете сделать тот же самый тест, который я только что сделал: 'python -c" import sys; sys.stdout.write ('stdout \ n'); sys.stderr.write ('stderr \ n'); ", за которым следует либо'> test.txt 2> & 1', либо '2> & 1> test.txt'.) Первый ставит в файл как« stdout », так и« stderr »; последний ставит «stdout» в файл и «stderr» на консоли. –

Смежные вопросы