0

当我从 unix 框运行以下命令时,它可以正常工作,但是当我从 tcl 脚本执行它时,它不起作用。请帮助我如何执行命令。

java -jar diffkit-0.9.0/diffkit-app.jar -planfiles plan.xml

我尝试了以下代码行

exec "java -jar diffkit-0.9.0/diffkit-app.jar -planfiles plan.xml"

eval "java -jar diffkit-0.9.0/diffkit-app.jar -planfiles plan.xml"
4

2 回答 2

5

使用单独的参数。

exec java -jar diffkit-0.9.0/diffkit-app.jar -planfiles plan.xml

我不确定是否exec在路径中查找,因此最好执行以下操作:

exec {*}[auto_execok java] diffkit-0.9.0/diffkit-app.jar -planfiles plan.xml

或者,如果您使用的是 8.4(顺便说一句,这是生命的尽头)

eval [linsert {exec diffkit-0.9.0/diffkit-app.jar -planfiles plan.xml} 1 [auto_execok java]]
于 2013-08-08T20:53:05.560 回答
1

有三种方法可以做到:

exec java -jar diffkit-0.9.0/diffkit-app.jar -planfiles plan.xml

没有引号;每个 Tcl 字成为一个单独的参数。

set command "java -jar diffkit-0.9.0/diffkit-app.jar -planfiles plan.xml"
exec {*}$command
# or in 8.4 and before, one of these:
# eval exec $command
# eval [list exec] [lrange $command 0 end]
# eval [linsert $command 0 exec]

或者,如果您更喜欢 shell 语法而不是 Tcl 语法:

set command "java -jar diffkit-0.9.0/diffkit-app.jar -planfiles plan.xml"
exec /bin/sh -c $command

当您需要进行复杂的重定向时,最后一个非常有用;它们目前在 Bourne shell(及其衍生工具)中比在 Tcl 中更容易。它(可能)不会在 Windows 上运行;不幸的是,与发射东西相当的东西CMD.EXE有点可怕。

于 2013-08-09T11:22:11.883 回答