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

それには次の 3 つの方法があります。

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 構文よりもシェル構文を好む場合は、次のようにします。

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

この最後のものは、複雑なリダイレクトを行う必要がある場合に非常に便利です。これらは現在、Tcl よりも Bourne シェル (およびその派生シェル) で行う方が簡単です。ただし、(おそらく) Windows では動作しません。残念ながら、ものを発射するのと同じCMD.EXEことは少し恐ろしいことです。

于 2013-08-09T11:22:11.883 に答える