2012-08-22 151 views
2

我有下面的腳本,在啓動時運行在tcsh中,然後在tcl中運行。 我得到錯誤badly placed()'s,不明白爲什麼我得到它。在tcl/tcsh混合腳本上出現錯誤()的錯誤

#!/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. 
+1

我不認爲這是一個TCL問題,它可能是一個tcsh問題。例如,請參閱[這裏](http://www.unix.com/shell-programming-scripting/44014-badly-placed-s-error.html)。嘗試在問題中添加Unix或Shell編程標籤。 – TrojanName

回答

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,即使是交互式使用,tcsh自20世紀90年代初以來一直超過zsh,並且在20世紀90年代後期bash被追上。如今你會發現很多沒有csh的unix系統,而每個unix系統都有一個Bourne風格的shell,如/bin/sh,你很難找到一個非常老的,因此它不會understand "[email protected]"

#!/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" "[email protected]" 
#\ 
exit 
+0

我認爲這是一個很好的答案,直到你有點侮辱(「這是21世紀......」)。如果你將這一點改爲不那麼居高臨下,你的答案會更好。 –

+0

@BryanOakley我沒有看到任何侮辱,但在那裏,我已經擴大了爲什麼使用sh。 – Gilles

+0

這現在是一個更好的答案。 –