Почему в этом коде «exec» дает «дочерний выход ненормально» - PullRequest
2 голосов
/ 01 июля 2011

Я запускаю этот код в tcl: -

set version [exec grep "INTERNAL VERSION:" mojave.log | sed -n -e "s/INTERNAL VERSION: //g" > xor.diff]

set p [exec diff ../log.warning.diff ../log.warning.gold >> xor.diff ]

Для последней строки выдает следующую ошибку после выполнения различий: -

> RULE-311 WARNING: Gdsii layer number 85 datatype 0 has already been defined
> TCL-11   WARNING: Command "check quartz drc" is overridden, Quality Of
> TCL-11   WARNING: Command "delete marker quartz" is overridden, Quality Of
> TCL-11   WARNING: Command "import marker quartz" is overridden, Quality Of
> TCL-11   WARNING: Command "mojave! run filter log" is overridden, Quality Of
> TCL-11   WARNING: Command "run quartz gui" is overridden, Quality Of Results
> TCL-11   WARNING: Command "ui! mojave draw rectangle" is overridden, Quality
> TCL-11   WARNING: Command "ui! mojave set_context" is overridden, Quality Of
> TCL-12   WARNING: Overridden command "mojave! run filter log" is used,
child process exited abnormally
     while executing
"exec diff ../log.warning.diff ../log.warning.gold 2> xor.diff "
     invoked from within
"set p [exec diff ../log.warning.diff ../log.warning.gold 2> xor.diff ]"
     (file "test.tcl" line 4)
     invoked from within
"source test.tcl"

И ничего не записывается в файл "xor.diff".

Ответы [ 2 ]

4 голосов
/ 01 июля 2011

exec возвращает ошибку, если команда возвращает ненулевое значение или отправляет что-либо в stderr. Существует очень подробное обсуждение использования catch с exec в http://wiki.tcl.tk/exec

4 голосов
/ 01 июля 2011

diffcomm) завершает работу с ненулевым значением, если обнаружены какие-либо различия, поэтому вы можете перенаправить вывод, чтобы использовать их как «это изменение? тесты. Для Tcl вы захотите использовать `|| : 'идиома, чтобы игнорировать статус выхода.

P.S. "бесполезное использование grep" ... sed -n -e '/INTERNAL VERSION: /s//gp'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...