我有一个简单的脚本,开始时在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.
答案 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}}