上下文:Windows 7,ActiveState Tcl 8.6.1
% info tclversion
8.6
% info patchlevel
8.6.1
我有一个名为SETCFG.EXE的C#控制台模式应用程序。它位于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
那么我做得对不对?我尝试过几种可能性。还有更多吗?
答案 0 :(得分:3)
您需要为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