2016-05-19 12 views
0

私はここで奇妙な状況があります。私はスクリプトのgetValue.itclでexecを実行する必要がありますが、入力リダイレクションでインラインで実行しようとすると出力が得られません。申し訳ありませんが、私は間違った条件を使用しています。シェルスクリプト内でtclshを使用しているときに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を使用しての間で何が表示されませんコマンド。

ありがとうございました

答えて

0

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

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

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

これは動作します:

#!/bin/sh 
# 

tclsh << EOSCRIPT 

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

exit 0 
関連する問題