2012-11-20 65 views
1

是否可以在其他shell腳本中實際定義的tcl腳本中調用函數?例如,在shell和TCL之間調用函數時需要幫助

我的shell腳本功能

add() 
{ 
`a=$1 
b=$2 
c=`expr $a + $b` 
`} 

如何調用TCL文件中這個功能呢?請用這個指導我

+0

很難相信TCL沒有你需要的功能,爲什麼不寫整個事情在TCL?或者,您的add()示例函數是一個更大的代碼體的placeeholder,它必須被重寫?祝你好運。 – shellter

回答

1

除了幾種方法之外,調用用Tcl編寫的另一種語言的函數是不可能的。例如,如果C函數符合Tcl的命令定義簽名,或者存在某些膠合代碼(例如可能由SWIG或Critcl生成),則可以調用它。調用代碼的另一種方式是在另一個進程中調用它,通常是一個子進程。運行在shell腳本的命令可能會再這樣做(假設你的函數定義是my_script.sh):

exec /bin/sh -c ". my_script.sh; add 123 456; echo \$c" 

但是,這是非常笨拙的和傾斜的更復雜的輸入值打交道時會出現問題。我建議把你的腳本變成一個可以更直接運行的整個程序(所以你可以做exec my_script.sh 123 456),或者更好的是,用一些其他語言編寫,比Unix shell有更少的神祕問題(即大多數語言!)

0

如果你的要求是執行一些功能後,從shell腳本獲得任何返回值,我會建議這種方法,

- >在shell腳本中定義每個函數在單獨的文件和Whereever可能,寫入返回值/ tmp目錄。

名:: add.sh :::::::::::給執行權限它

function add() 
{ 
a=$1 
b=$2 
c=`expr $a + $b 
echo $c > /tmp/arg1 
} 

add $1 $2 

::::::::::::::::: ::::::::::::::::::

現在打開tclsh的,

[[email protected] test]# tclsh 
% 
% ./add.sh 2 3 
% set fp [open /tmp/arg1] 
file3 
% set value [read $fp] 
5 

% close $fp 
% set value 
5 

% ^C 
[[email protected] test]#