在tcl / tcsh混合脚本上错误地放置了()错误

时间:2012-08-22 07:49:53

标签: unix tcl tcsh

我有一个简单的脚本,开始时在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(wish)开始运行的指示后才会出现错误消息:

> 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.

1 个答案:

答案 0 :(得分:4)

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

最后使用&,这将在脚本上执行TCL解释器,但在csh中继续执行。由于以下是TCL语法而不是csh,这不能正确结束,并且当csh到达行lappend auto_path $env(KITE)/lib/pwidget时确实会抱怨。删除&

此外,"$*"连接所有参数并将它们传递给wishx的单个参数。要更改参数,请设置${*:q}。此外,如果wishx解释器由于某种原因不存在,则应退出脚本而不是继续在tcsh中执行。

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

哦,考虑使用Bourne shell语法。 Csh is not a very good scripting tool in the first place,甚至为了交互式使用,自20世纪90年代初以来,zsh已经超越了zsh,并且在20世纪90年代末出现了bash。你会发现现在有很多没有csh的unix系统,而每个unix系统都有一个Bourne风格的shell作为/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 的系统。 }}

{{1}}