是否可以在其他shell腳本中實際定義的tcl腳本中調用函數?例如,在shell和TCL之間調用函數時需要幫助
我的shell腳本功能
add()
{
`a=$1
b=$2
c=`expr $a + $b`
`}
如何調用TCL文件中這個功能呢?請用這個指導我
是否可以在其他shell腳本中實際定義的tcl腳本中調用函數?例如,在shell和TCL之間調用函數時需要幫助
我的shell腳本功能
add()
{
`a=$1
b=$2
c=`expr $a + $b`
`}
如何調用TCL文件中這個功能呢?請用這個指導我
除了幾種方法之外,調用用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有更少的神祕問題(即大多數語言!)
如果你的要求是執行一些功能後,從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]#
很難相信TCL沒有你需要的功能,爲什麼不寫整個事情在TCL?或者,您的add()示例函數是一個更大的代碼體的placeeholder,它必須被重寫?祝你好運。 – shellter