Не понимаю, почему я не могу выполнить двоичный файл командной строки в tclsh

Контекст: Windows 7, ActiveState Tcl 8.6.1

% info tclversion
8.6
% info patchlevel
8.6.1

У меня есть консольное приложение С# под названием SETCFG.EXE. Он находится по пути в C:\BIN.

% set project corp
corp
% set method Recent
Recent
% exec -- [list c:/bin/setcfg.exe bobat.cfg inserter.${project}.Method $method]
couldn't execute "c:\bin\setcfg.exe bobat.cfg inserter.corp.Method Recent": no such file or directory

Теперь может случиться так, что я неправильно указываю код tcl - прошло много лет с момента последней встречи - поэтому я попробую выполнить строку

% exec -- "c:/bin/setcfg.exe bobat.cfg inserter.${project}.Method $method"
couldn't execute "c:\bin\setcfg.exe bobat.cfg inserter.corp.Method Recent": no such file or directory

Хммм... может надо сначала поставить программу, а потом параметры...

% exec -- "c:/bin/setcfg.exe" "bobat.cfg inserter.${project}.Method $method"
Syntax:
        c:\bin\setcfg.exe cfg sym val
child process exited abnormally

Параметры в списке?

% exec -- "c:/bin/setcfg.exe" [list bobat.cfg inserter.${project}.Method $method]
Syntax:
        c:\bin\setcfg.exe cfg sym val
child process exited abnormally

Так что я делаю не так? Я пробовал несколько возможностей. Есть ли еще?


person bugmagnet    schedule 19.10.2013    source источник


Ответы (1)


Вам нужно указать несколько аргументов для exec, а не один аргумент. Ты хочешь

exec -- c:/bin/setcfg.exe  bobat.cfg  inserter.${project}.Method  $method

Иногда вы увидите код, который создает команду в виде списка. В этом случае вы будете использовать оператор «splat», чтобы расширить список на отдельные элементы.

set command [list c:/bin/setcfg.exe bobat.cfg inserter.${project}.Method $method]
exec -- {*}$command

См. справочную страницу exec и страница синтаксиса Tcl

person glenn jackman    schedule 19.10.2013