2

私は休眠スクリプトを持っています。最初はtcshで実行され、次にtclで実行されます。エラーが発生badly placed ()'sし、なぜ発生するのかわかりません。

    #!/usr/intel/bin/tcsh -f
    #\
    set TCL_VERSION="8.4.6o_64"
    #\
    setenv WORK_AREA_ROOT_DIR .
    #\
    exec ${CAD_ROOT}/tcl/${TCL_VERSION}/bin/wishx "$0" "$*" &

    lappend auto_path $env(KITE)/lib/pwidget
    lappend auto_path $env(KITE)/local_cad/nlview/tcl/
    lappend auto_path $env(KITE)/tcl/

    lappend auto_path $env(KITE)/gui/tcl/plotter
    lappend auto_path $env(KITE)/gui/tcl/graph-class

    package require Pwidget+
    package require Nlview

    package require sparam_view_graph

    package require BLT
    namespace import -force ::blt::bgexec

    source $env(KITE)/gui/tcl/sparam_view_env.tcl
    source $env(KITE)/tcl/sparamParser.tcl

    load $env(KITE)/lib/utils/libKitKiteUtilsTcl.so
    source $env(KITE)/lib/utils/qbnamex.tcl

    catch {delete object reg}
    TclRegistry reg -varname _app

    sparam_view_env "." $argv

エラーメッセージは、tcl(ウィッシュ)が実行を開始したことを示した後にのみ表示されます。

> bin/sparam_view_stand_alone.tcl /nfs/iil/proj/dt/epm16/work/imelam2/test/kite_check/kite/input/s2p/ISI_bit29.s2p
[1] 11474
Badly placed ()'s.
4

1 に答える 1

4
exec ${CAD_ROOT}/tcl/${TCL_VERSION}/bin/wishx "$0" "$*" &

最後にa&を付けると、スクリプトでTCLインタープリターが実行されますが、cshで実行され続けます。以下はTCL構文ですが、cshではないため、これを正しく終了することはできません。実際、cshは行に到達すると文句を言いlappend auto_path $env(KITE)/lib/pwidgetます。を削除し&ます。

また、"$*"すべての引数を連結し、それらを1つの引数で。に渡しますwishx。引数を変更せずに渡すには、それを作成し${*:q}ます。また、wishx何らかの理由でインタープリターが存在しない場合は、tcsh内でスクリプトを実行し続けるのではなく、スクリプトを終了する必要があります。

exec "${CAD_ROOT}/tcl/${TCL_VERSION}/bin/wishx" "$0" ${*:q}
#\
exit 127

ああ、代わりにBourneシェル構文を使用することを検討してください。そもそもCshはあまり優れたスクリプトツールではなく、インタラクティブに使用する場合でも、tcshは1990年代初頭からzshに追い抜かれ、bashは1990年代後半に追いつきました。最近では、cshを使用しないUNIXシステムがたくさんありますが、すべてのUNIXシステムにはBourneスタイルのシェルがあり、理解でき/bin/shないほど古いものを見つけるのは難しいでしょう。"$@"

#!/bin/sh
#\
TCL_VERSION="8.4.6o_64"
#\
WORK_AREA_ROOT_DIR=.
#\
export WORK_AREA_ROOT_DIR
#\
exec "${CAD_ROOT}/tcl/${TCL_VERSION}/bin/wishx" "$0" "$@"
#\
exit
于 2012-08-22T11:51:07.623 に答える