0

ここで奇妙な状況があります。スクリプト getValue.itcl で exec を実行する必要がありますが、入力リダイレクトを使用してインラインで実行しようとすると出力が得られません。間違った用語を使用している場合は申し訳ありません。

インラインで使用すると、このスクリプトの他の側面に役立ちます。そうしないと、部分を分離する必要があります。そして、私はtcl 8.0を使用しています(オプションはありません)。

例: これは、tclsh として再起動するシェル スクリプトを使用すると機能します。

#!/bin/sh
#

# \
cd 'dirname $0'
# Next line restarts as tclsh \
exec tclsh 'basename $0' $*

proc Main { } {
    set val [exec getValue.itcl PARAMETER]
    puts "$val"
}
Main
exit

しかし、スクリプトでこれを別の方法で実行すると、機能しません。

これは動作しません:

#!/bin/sh
#

tclsh << EOSCRIPT

    set val [exec getValue.itcl PARAMETER]
    puts "$val"
EOSCRIPT

exit 0

出力が得られません。単純にコマンドを実行する場合、最初の方法と 2 番目の方法で tclsh を使用することの違いがわかりません。

ありがとう

4

1 に答える 1

0

私はそれを理解しました、愚かな間違い。

<< を使用すると、ヒアドキュメントと呼ばれます...ヒアドキュメント?

過去にそれらを少し使用しましたが、あまり使用していませんでした。古い例を掘り下げて、変数が送信される前に展開されていることに気付きました。それらをエスケープする必要があります。

これは機能します:

#!/bin/sh
#

tclsh << EOSCRIPT

    set val [exec getValue.itcl PARAMETER]
    puts "\$val"
EOSCRIPT

exit 0
于 2016-05-19T19:12:42.730 に答える