当我从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"
答案 0 :(得分: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]]
答案 1 :(得分: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]
或者,如果您更喜欢使用Tcl语法的shell语法:
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
发射的东西有点可怕。