4

tclスクリプトからcshスクリプトを実行しようとしています。

以下のtclスクリプトはcshスクリプトを呼び出します

#!/usr/bin/tclsh


set scripts_path /scratch/TCL_scripts/scripts_adders

set synthesis /scratch/TCL_scripts/synthesis.csh


set files [glob -directory $scripts_path *]
split $files
set files [lsort $files]
set i 1

foreach script $files {

     puts "hello"
     # puts [pwd]
     exec /bin/csh -c $synthesis
     puts $i

}

そして、(の始まりの)cshファイルは以下のとおりです。

#!/bin/csh -f


echo abcdefgh

UNIXターミナルからのみcshファイルを実行すると、正常に動作します。Tclスクリプトを呼び出すと、実行されて実際に「hello」と書き込まれ、iが出力されますが、「abcdefgh」がターミナルに表示されないため、cshファイルは実行されません。他のコマンドも試しましたが、いつも同じ問題があります。ターミナルから直接実行すると正常に実行されますが、Tclスクリプトから実行するとcshスクリプトが実行されません。

(私のTclスクリプトとcshスクリプトはどちらも実行可能です)

Tclスクリプトからcshスクリプトを実行するには、何をする必要がありますか?

どうもありがとうございます

4

1 に答える 1

5

cshスクリプトは実際に実行されますが、デフォルトでは、その標準出力はTclコマンドの結果execになります(標準エラーで何かが生成された場合、それはのエラー結果になりますexec)。出力とエラーを端末に表示するには、次のように変更する必要がありますexec

exec /bin/csh -c $synthesis >@stdout 2>@stderr

>@「標準出力を次のチャネルにリダイレクトする」(stdoutこの場合)と言い2>@、標準エラーについても同じことを行います。

于 2012-11-12T10:29:01.567 に答える