Команда exec в скрипте Tcl выполняется молча

Я хочу выполнить следующую команду в сценарии tcl. Команда относится к конкретному инструменту.

exec tool cut Netlists/$::env(DESIGN_NAME).netlist.v

Когда вышеупомянутая команда выполняется при запуске сценария tcl, соответствующий вывод не отображается на терминале.

Когда я пытаюсь запустить эту команду в оболочке tcl, она работает нормально.

Есть ли способ распечатать результат на терминале?


person Namalians    schedule 28.01.2021    source источник
comment
Он работает в оболочке Tcl, потому что, когда tclsh работает в интерактивном режиме, он полезен тем, что печатает результат выполняемой им команды. Неинтерактивное выполнение скрипта не производит вывод, если это не указано в команде.   -  person andy mango    schedule 28.01.2021


Ответы (1)


Если вы хотите, чтобы вывод был направлен на терминал, вам нужно добавить перенаправления (иначе вывод становится результатом Tcl команды exec). Это делается путем добавления >@stdout 2>@stderr (обычно вы хотите перенаправить как потоки вывода, так и потоки ошибок).

exec tool cut Netlists/$::env(DESIGN_NAME).netlist.v >@stdout 2>@stderr

Если вы собираетесь делать это много, может помочь процедура помощника:

proc tool {args} {
    # You might do other things here, like logging what command was actually called
    exec tool {*}$args >@stdout 2>@stderr
}

tool cut Netlists/$::env(DESIGN_NAME).netlist.v
person Donal Fellows    schedule 28.01.2021
comment
В простых случаях достаточно сделать puts [exec tool cut Netlists/$::env(DESIGN_NAME).netlist.v]. - person Schelte Bron; 28.01.2021
comment
Спасибо @Donal Fellows, у меня сработало перенаправление. - person Namalians; 29.01.2021